select t1.PK_ID id,--主键
t1.FK_IPC_INNU zyid,--住院号
--(select round(to_number(IPC_REGISTER.TIME_OUT - IPC_REGISTER.TIME_IN)) from IPC_REGISTER);
t3.P2 visit_id,--住院次数
t3.p3 Patient_id,--病历号(Patient_id)
t1.PERSON_NAME patient_name,--患者姓名
--REG_REGISTER.WEIGHT weight,--体重
t5.CERTIFICATE_NUMBER id_carrd_id,--证件号码
t3.P7 age,--年龄
t3.P66_UNIT age_nuit, --年龄单位(age_nult)
t2.FK_DEPA dept_code,--住院患者在科科室编号
t2.DEPANAME Dept_name,--住院患者在科科室名称
TO_CHAR(t1.TIME_IN,'yyyy-MM-dd hh24:mi:ss') In_hosp_at,--入院时间
t1.FK_DEPA_IN In_dept_id,--入院科室编号
t1.DEPANAME_IN In_dept_name,--入院科室名称
TO_CHAR(t1.TIME_OUT,'yyyy-MM-dd hh24:mi:ss') Out_hosp_at,--出院时间
t1.FK_DEPA_OUT Out_dept_id,--出院科室编号
t1.DEPANAME_OUT Out_dept_name,--出院科室名称
t2.FK_SYS_WABE Bed_no,--病床号
t3.FK_USER_P433 Charge_dr_id, --主管医生工号(Charge_dr_id)
t3.P433 Charge_dr_name,--主管医生姓名
t3.FK_USER_P819 Chaege_nr_id, --主管护士工号(Chaege_nr_id)
t3.P819 Charge_nr_name, --主管护士姓名
t5.CURRENT_DETAILED_ADDRESS address,--现住址
t3.P14 Work_addr,--工作单位
t5.TEL_NO tel,--联系电话
t1.EMERGENCY_NAME lxr_name,--联系人
t1.EMERGENCY_TEL Lxr_phone, --联系人电话
t3.FK_DICT_105 natton,--民族
t5.FK_DICT_108 educatton, --文化程度(educatton)
t3.FK_DICT_103 job, --人群分类(job)
t1.TOTAL_MONEY cost, --总费用
(select round(to_number(IPC_REGISTER.TIME_OUT - IPC_REGISTER.TIME_IN)) from IPC_REGISTER) in_days,--住院天数(in_days)
t3.P27 in_days,
t4.FK_DICT_402 outcome --转归情况(outcome)
from IPC_REGISTER t1,--住院登记表
INUR_IN_DEPARTMENT t2,--住院患者在科信息表
CASE_FIRSTPAGE t3, --病案首页
IDOC_DIAGNOSE t4, --住院诊断取转归情况字段
SYS_PERSON t5
where t1.fk_sys_pers=t2.fk_sys_pers
and t1.fk_sys_pers=t3.fk_sys_pers
and t1.fk_sys_pers=t4.fk_sys_pers
and t1.fk_sys_pers=t5.pk_id;
查询中提示这个如何处理
select round这一行,必须使用distinct、sum、max、min、count等关键字,从语法上保证查询结果是唯一的,而不能依赖于数据是唯一的
(select round(to_number(IPC_REGISTER.TIME_OUT - IPC_REGISTER.TIME_IN)) from IPC_REGISTER) in_days
应该是这个子查询返回了多行,加筛选条件限制下
有帮助的话,请点采纳该答案~
这个直接查询后边没有where条件?那你不是查询的全表的数据么
(select round(to_number(IPC_REGISTER.TIME_OUT - IPC_REGISTER.TIME_IN)) from IPC_REGISTER) in_days,--住院天数(in_days)
这个错误通常是由于子查询返回多行,而主查询只能接受一行的结果,导致的。在你的SQL语句中,第一个子查询就存在这个问题,你需要将它修改成只返回一行结果。具体来说,你需要确保IPC_REGISTER表中只有一条记录(这是一个单行记录的表),然后可以使用以下语句来代替原来的子查询:
(SELECT ROUND(TO_NUMBER(t1.TIME_OUT - t1.TIME_IN))
FROM IPC_REGISTER t1
WHERE t1.FK_SYS_PERS = t5.PK_ID
AND ROWNUM = 1) in_days
这样,你就可以避免单行子查询返回多行的错误了。另外,我还发现你的SQL语句中存在一些不必要的表连接(比如IDOC_DIAGNOSE和SYS_PERSON),你可以尝试简化一下语句,提高执行效率。
里面加个LIMIT1就可以了,取1条数据。
你是想多拼接一列这个计算出来的in_days吗
那这样你可以用join 先把这一列算出来+上主键 然后left join 这一段子查询 主键相等,这样应该能取到你想要的值
left join
(select PK_ID id,round(to_number(IPC_REGISTER.TIME_OUT - IPC_REGISTER.TIME_IN)) in_days from IPC_REGISTER) t2
on t1.PK_ID=t2.PK_ID
或者你确定他的排序不会错的话,可以left join on 1=1
left join
(select round(to_number(IPC_REGISTER.TIME_OUT - IPC_REGISTER.TIME_IN)) in_days from IPC_REGISTER) t2
on 1=1
上面查询的时候调用这个查询出来的列就行