Объединение нескольких таблиц с одинаковым идентификатором и извлечение поля на основе общего идентификатора - PullRequest
0 голосов
/ 07 июня 2018

Контекст: медицинская клиника имеет 2 таблицы: одну на посещение пациента и одну на прием к пациенту.Они не 1: 1;можно записаться на прием без посещения или на прием без предварительной записи.Идентификатором для обеих таблиц является идентификатор встречи, 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 голосов
/ 07 июня 2018

Пока 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
0 голосов
/ 07 июня 2018

Вы можете использовать ISNULL, чтобы присоединиться к таблице P.

...(Your outer join query)
LEFT JOIN P
ON P.Patient_ID = ISNULL(V.Patient_ID, A.PatientID)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...