在第一集中显示患者的前两个​​诊断,但在同一行

时间:2018-06-01 15:22:13

标签: sql sql-server

我想在第一集中显示患者的前两个​​诊断,但是在同一行。有时患者没有两个诊断,因此需要返回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搜索了!任何帮助,非常感谢。

1 个答案:

答案 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 DISTINCTGROUP BY都不是必需的。
  • 我认为您的查询中没有所有必要的加入条件。
  • 您的where子句取消外连接。
  • 使用标准日期格式,例如YYYY-MM-DD。