连接具有相同标识符的多个表&根据共享标识符

时间:2018-06-07 17:26:09

标签: sql sql-server tsql

背景:医疗保健诊所有2个表:一个是患者就诊,另一个是患者预约。它们不是1:1;可以在没有预约的情况下预约,或者无需预约就诊。两个表的标识符是遭遇ID enc_ID。我正在尝试将这些表格连接在一起并引入患者姓名。

访问表(V)的简要示例:

enc_ID         Visit_date     Patient_ID
1              2018-06-01     10
2              2018-06-02     11

预约数据(A):

enc_ID         Appointment_time          Patient_ID
1              2018-06-01 13:00          10
3              2018-06-03 14:00          12

在visit_ID上外连接这些会产生如下内容:

enc_ID      V.Visit_date   A.Appointment_time   V.Patient_ID   A.Patient_ID
1           2018-06-01     2018-06-01 13:00     10             10
2           2018-06-02     NULL                 11             NULL
3           NULL           2018-06-03 14:00     NULL           12

假设我想基本结合V.Patient_ID和A.Patient_ID,并从另一个表(P)中提取患者姓名,并加入Patient_ID。所需的输出:

enc_ID      V.Visit_date   A.Appointment_time   Patient_ID   Patient_Name
1           2018-06-01     2018-06-01 13:00     10           Patient A
2           2018-06-02     NULL                 11           Patient B
3           NULL           2018-06-03 14:00     13           Patient C

如何实现这一目标?我可能遗漏了一些明显的东西,但我不知道如何加入P.Patient_Name而不必将其加入V.Patient_ID或A.Patient_ID,其中任何一个都会导致患者姓名为空。

提前致谢!

2 个答案:

答案 0 :(得分:4)

只要两个表中的enc_ID都不可为空,您就可以将这些字段与COALESCE组合:

SELECT 
    COALESCE(V.Patient_ID, A.Patient_ID) AS enc_ID,
    V.Visit_date,
    A.Appointment_time,
    COALESCE(V.Patient_ID, A.Patient_ID) AS Patient_ID,
    P.Patient_Name
FROM V 
FULL JOIN A ON V.enc_ID = A.enc_ID
INNER JOIN P 
    ON P.Patient_ID = V.Patient_ID
    OR P.Patient_ID = A.Patient_ID
    -- ON P.Patient_ID = COALESCE(V.Patient_ID, A.Patient_ID) also works

答案 1 :(得分:0)

您可以使用ISNULL加入表格P.

...(Your outer join query)
LEFT JOIN P
ON P.Patient_ID = ISNULL(V.Patient_ID, A.PatientID)