目前我的报告是笛卡尔积的一个主要例子,但我似乎无法找到解决方案
我有2张桌子,1张桌子包含467个门诊预约,第2张包含62名住在一夜之间的病人(住院病人)。少数患者有2或3个住院过夜,这些少数患者导致我头痛
我需要生成一份显示所有活动的报告,但当患者作为门诊病人和住院病人接受治疗时,显示2个住院病人日期之间的所有门诊病人预约
我无法弄清楚如何从一个表中读取一行并从第二个表中读取2行并检查 inpat_date_first和inpat_date_second之间的appointment_date
目前的结果是: -
NHS No IP Start IP End OP Appoint
NHS_No1 21/12/2016 21/12/2016 12/01/2017 1
NHS_No1 21/12/2016 21/12/2016 16/12/2016 1
NHS_No1 21/12/2016 21/12/2016 24/11/2016 1
NHS_No1 21/12/2016 21/12/2016 28/12/2016 1
NHS_No1 21/12/2016 21/12/2016 06/10/2016 1
NHS_No1 21/12/2016 21/12/2016 21/07/2016 1
NHS_No1 21/12/2016 21/12/2016 27/10/2016 1
NHS_No1 21/12/2016 21/12/2016 08/12/2016 1
NHS_No1 21/12/2016 21/12/2016 01/12/2016 1
NHS_No1 21/12/2016 21/12/2016 15/12/2016 1
NHS_No1 21/12/2016 21/12/2016 21/07/2016 1
NHS_No1 16/11/2016 16/11/2016 12/01/2017 2
NHS_No1 16/11/2016 16/11/2016 16/12/2016 2
NHS_No1 16/11/2016 16/11/2016 24/11/2016 2
NHS_No1 16/11/2016 16/11/2016 28/12/2016 2
NHS_No1 16/11/2016 16/11/2016 06/10/2016 2
NHS_No1 16/11/2016 16/11/2016 21/07/2016 2
NHS_No1 16/11/2016 16/11/2016 27/10/2016 2
NHS_No1 16/11/2016 16/11/2016 08/12/2016 2
NHS_No1 16/11/2016 16/11/2016 01/12/2016 2
NHS_No1 16/11/2016 16/11/2016 15/12/2016 2
NHS_No1 16/11/2016 16/11/2016 21/07/2016 2
NHS_No1 31/08/2016 31/08/2016 12/01/2017 3
NHS_No1 31/08/2016 31/08/2016 16/12/2016 3
NHS_No1 31/08/2016 31/08/2016 24/11/2016 3
NHS_No1 31/08/2016 31/08/2016 28/12/2016 3
NHS_No1 31/08/2016 31/08/2016 06/10/2016 3
NHS_No1 31/08/2016 31/08/2016 06/10/2016 3
NHS_No1 31/08/2016 31/08/2016 21/07/2016 3
NHS_No1 31/08/2016 31/08/2016 27/10/2016 3
NHS_No1 31/08/2016 31/08/2016 27/10/2016 3
NHS_No1 31/08/2016 31/08/2016 08/12/2016 3
NHS_No1 31/08/2016 31/08/2016 01/12/2016 3
NHS_No1 31/08/2016 31/08/2016 15/12/2016 3
NHS_No1 31/08/2016 31/08/2016 21/07/2016 3
我需要的地方: -
NHS No IP Start IP End OP Appoint
NHS_No131/08/2016 31/08/2016 21/07/2016
NHS_No1 31/08/2016 31/08/2016 21/07/2016
NHS_No1 31/08/2016 31/08/2016 06/10/2016
NHS_No1 31/08/2016 31/08/2016 06/10/2016
NHS_No1 31/08/2016 31/08/2016 27/10/2016
NHS_No1 31/08/2016 31/08/2016 27/10/2016
NHS_No1 16/11/2016 16/11/2016 24/11/2016
NHS_No1 16/11/2016 16/11/2016 01/12/2016
NHS_No1 16/11/2016 16/11/2016 08/12/2016
NHS_No1 16/11/2016 16/11/2016 15/12/2016
NHS_No1 16/11/2016 16/11/2016 16/12/2016
NHS_No1 21/12/2016 21/12/2016 21/07/2016
NHS_No1 21/12/2016 21/12/2016 28/12/2016
NHS_No1 21/12/2016 21/12/2016 12/01/2017
由于
答案 0 :(得分:0)
也许我错过了什么,但为什么这不能产生你想要的结果呢?
select ip.*, op.*
from Sandbox.dbo.tbl_Wilts_Glaucoma_ipSpells ip
inner join Sandbox.dbo.tbl_Wilts_Glaucoma_opAppoints op
on op.Pseudonym = ip.Pseudonym
and op.AppointmentDate >= ip.AdmitDate
and op.AppointmentDate <= ip.DischargeDate
要显示两个表中的所有行,但当op匹配连接条件时显示在同一行,请使用full outer join
:
select ip.*, op.*
from Sandbox.dbo.tbl_Wilts_Glaucoma_ipSpells ip
full outer join Sandbox.dbo.tbl_Wilts_Glaucoma_opAppoints op
on op.Pseudonym = ip.Pseudonym
and op.AppointmentDate >= ip.AdmitDate
and op.AppointmentDate <= ip.DischargeDate
答案 1 :(得分:0)
怀疑它。 感谢那些帮助清除蜘蛛网以寻找解决方案的人