Соединение двух ЛЕВЫХ СОЕДИНЕНИЙ Вместе

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

Я пытаюсь объединить эти два ЛЕВЫХ СОЕДИНЕНИЯ вместе.

Предварительный просмотр таблиц, с которыми я работаю:

Например /context:

Имя таблицы: [GMC утверждает, что 2019]

ПатНо RevCode CPT Выставленные счета DRG
5 141 null 500 439
5 636 J1234 276000 101

Имя таблицы: BCBS_DRG_REIMBURS

Код DRG Описание Вес DRG ALOS Высокая обрезка Дата вступления в силу Скорость DRG Суточные высокие выбросы обрезки
42 XXXXX YYYYY 30 54 10/1/2018 $235,121.59 $5,486.17
101 XXXXX YYYYY 24 40 10/1/2018 $146,736.72 $4,279.82
439 XXXX YYYYY 13 23 10/1/2018 $63,124.34 $3,399.00

Имя таблицы: [BCBS DRG ВЫРЕЗАТЬ 07012016]

DRG Обслуживание PMT (SDA)
101 DRG ВЫРЕЗАТЬ 13537
439 DRG ВЫРЕЗАТЬ 13537

Желаемый результат:

DRG Возмещение DRG Вырезать PMT
439 $63,124.34 13537
101 $146,736.72 13537

Логика заключается в том, что, учитывая таблицу утверждений в качестве нашей основной таблицы, найдите совпадающие коды DRG (в данном случае 101 и 439) и верните соответствующие значения (таким образом, возмещение DRG из таблицы BCBS_DRG_REIMBURS и выделение PMT из таблицы [BCBS DRG ВЫРЕЗАТЬ 07012016].

Мой код / попытка:

 SELECT
    [GMC Claims 2019].DRG
FROM
    [GMC Claims 2019]
LEFT JOIN 
    [BCBS DRG CARVE OUT 07012016] ON [GMC Claims 2019].DRG = [BCBS DRG CARVE OUT 07012016].DRG
WHERE
    [GMC Claims 2019].DRG = [BCBS DRG CARVE OUT 07012016].DRG
LEFT JOIN 
    BCBS_DRG_REIMBURS ON [GMC Claims 2019].DRG = BCBS_DRG_REIMBURS.DRG_Code
WHERE
    [GMC Claims 2019].DRG = BCBS_DRG_REIMBURS.DRG_Code
 

Комментарии:

1. Сегодня меня убивает Markdown … вопрос корректно отображает таблицы в предварительном просмотре, но не при публикации..

2. Я отправил вам электронное письмо! Спасибо!

Ответ №1:

Я думаю, что внутреннее соединение между тремя таблицами будет служить вашей цели:

 select c.drg, b.Per_Diem_High_Trim_Outlier, d.pmt
from  [GMC Claims 2019] c 
inner join [BCBS_DRG_REIMBURS] b on c.drg = b.drg_code 
inner join [BCBS DRG CARVE OUT 07012016] d on d.drg = b.drg_code
 

Комментарии:

1. Это действительно служит моим целям, спасибо!. Есть ли способ добиться того же результата без жесткого кодирования в 439 101? Набор данных содержит ~ 1 миллион строк, поэтому я стараюсь избегать жесткого кодирования, если это возможно.

2. Просто удалите условие. Тогда этот запрос вернет все строки, которые удовлетворяют условию объединения.

Ответ №2:

когда вы присоединяетесь, существует условие, при котором вы присоединяетесь, нет необходимости в предложении where , если только нет причины, однако в вашем случае вам нужно внутреннее соединение, а не внешнее соединение:

 SELECT
    *
FROM
    [GMC Claims 2019]
JOIN BCBS_DRG_REIMBURS 
        ON [GMC Claims 2019].DRG = BCBS_DRG_REIMBURS.DRG_Code
JOIN [BCBS DRG CARVE OUT 07012016]  -- < here maybe it should be left join ?
        ON [GMC Claims 2019].DRG = [BCBS DRG CARVE OUT 07012016].DRG

 

Комментарии:

1. кстати, это худшее именование объекта

2. Я должен использовать псевдонимы правильно, чтобы сделать его чище? Кроме того, то, что вы мне дали, имеет смысл, но не возвращает DRG 101, который отображается во всех 3 таблицах. Он повторяет DRG 439 дважды. Кстати, спасибо за ваше время!

3. в любом случае, имя этих таблиц / представления остается таким же, в случае 101, возможно, у вас нет данных в таблице «[BCBS DRG ВЫРЕЗАТЬ 07012016]», в этом случае вам нужно использовать левое соединение