【问题标题】:Show the first two diagnoses for a patient in the first episode, but on the same row在第一集中显示患者的前两个​​诊断,但在同一行
【发布时间】:2018-06-01 23:45:11
【问题描述】:

我想在第一集中显示患者的前两个​​诊断,但在同一行。有时患者没有两次诊断,因此需要返回 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 management Studio 2007。我已经在 Google 上搜索过很多次了!任何帮助,不胜感激。

【问题讨论】:

  • 将右连接更改为左连接。还将谓词移动到连接。当您将它们放在 where 子句中时,您的外连接在逻辑上已成为内连接。如果这不能解决问题,那么您需要向我们提供一些详细信息。 spaghettidba.com/2015/04/24/…
  • 样本数据和期望的结果会有所帮助。
  • 样本数据和期望的结果会有所帮助。

标签: sql sql-server


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-04
    • 2018-08-16
    • 2021-02-23
    • 2022-08-16
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多