我想在第一集中显示患者的前两个诊断,但是在同一行。有时患者没有两个诊断,因此需要返回null或空白。诊断表字段是Patid,Epno(剧集编号),DiagNo,diagcode。我想显示结果:Patientno1 EpNo 1 Diagno1 DiagCode,Diagno 2 Diagcode。
示例:
Patient 123456 epno 1 DiagNo1 diagcode = W234 DiagNo2 Diagcode = e3456.
Patient 890765 epno 1 diagNo1 diagcode = R345 (No second diagnosis)
我尝试过selfjoins,但无法解决患者没有第二次诊断的问题2.下面的脚本(Spell表定义了我的日期)。
SELECT distinct
d1.PatID
,d1.diagno
,d1.DiagCode
,d1.DiagDesc as d1
,d2.diagno
,d2.DiagCode
,d2.DiagDesc AS d2
FROM spell s
left JOIN diagnosis d1 ON s.AdmNo = d1.AdmNo
right JOIN diagnosis d2 ON d1.AdmNo = d2.AdmNo AND d2.EpNo = d1.epno
WHERE s.AdmDate>= '25-may-2018'
AND d1.EpNo = 1 AND d1.DiagNo = 1 AND d2.EpNo = 1
GROUP BY
d1.PatID
,d1.diagno
,d1.DiagCode
,d1.DiagDesc
,d2.diagno
,d2.DiagCode
,d2.DiagDesc
我正在使用SQLServer管理Studio 2007.我已多次使用Google搜索了!任何帮助,非常感谢。
答案 0 :(得分:1)
你似乎想要:
SELECT d1.PatID, d1.diagno, d1.DiagCode, d1.DiagDesc as d1,
d2.diagno, d2.DiagCode, d2.DiagDesc AS d2
FROM spell s LEFT JOIN
diagnosis d1
ON s.AdmNo = d1.AdmNo AND d1.EpNo = 1 and d1.diagno = 1 LEFT JOIN
diagnosis d2
ON s.AdmNo = d2.AdmNo AND d2.EpNo = d1.epno AND d2.diagno = 2 and d2.EpNo = 1
WHERE s.AdmDate >= '2018-05-25';
您似乎在diagnosis
中存储多个诊断,使用diagno
来区分它们。
注意:
RIGHT JOIN
几乎从不有用。只需使用LEFT JOIN
。SELECT DISTINCT
和GROUP BY
都不是必需的。where
子句取消外连接。