【发布时间】:2016-02-10 17:06:23
【问题描述】:
我需要在一列中列出 6 个医疗机构,在另一列中列出患者的全名。如果患者以前从未去过该办公室,则应显示 NULL。
- 表结构很简单,MedicalOffice 有一个 ID, 名称,以及一些杂项。
- MedicalProcedure 具有 officeID、患者ID、患者全名,以及一些杂项 列。
MedicalOffice 表中每个 office 只有一个 ID,但 MedicalProcedure 可以为每个患者拥有多个 officeID,甚至同一患者的同一 officeID 可以不止一次。
根据我在 SO 上找到的一些答案,我尝试了左外连接:
select m.Name, p.FullName
from MedicalOffice m
left outer join MedicalProcedure p ON m.ID = p.officeID
where m.ID IN (1,2,3,4,5,6)
AND p.patientID = 111
GROUP BY m.Name, p.patientID
ORDER BY m.Name
然后是左连接:
select m.Name, p.FullName
from MedicalOffice m
left join MedicalProcedure p ON m.ID = p.officeID
where m.ID IN (1,2,3,4,5,6)
AND p.patientID = 111
GROUP BY m.Name, p.patientID
ORDER BY m.Name
但我只得到这样的 MedicalProcedure 表中存在记录的办公室:
Name | FullName
----------------------------------
Office 1 Smith, John
Office 2 Smith, John
Office 4 Smith, John
但是,如果患者 ID 111 在 MedicalProcedure 表中有 3 条记录用于办公室 1、2 和 4,则结果应如下所示:
Name | FullName
----------------------------------
Office 1 Smith, John
Office 2 Smith, John
Office 3 NULL
Office 4 Smith, John
Office 5 NULL
Office 6 NULL
有没有办法得到我需要的结果?
谢谢!
【问题讨论】:
标签: sql-server sql-server-2008 tsql sql-server-2008-r2 sql-server-2012