T-SQL левое внешнее соединение Выберите Top 1 - MAX - PullRequest
0 голосов
/ 05 октября 2018

У меня есть данные из таблицы, которая выглядит следующим образом:

encounter | prov_id_name
---------------------------
12345678  | 123456ProviderA

Затем я хочу сопоставить их по идентификатору провайдера из таблицы измерений вместо того, чтобы извлекать подстроку, если есть совпадение втаблица затемнения.

Таблица размеров выглядит следующим образом:

orgz_cd | src_pract_no | pract_rpt_name
----------------------------------------
0002    | 123456       | PROVIDER A X
1234    | 123456       | Provider A
4321    | 123456       | Provider A

Я использовал следующий обработанный SQL, чтобы получить то, что мне нужно:

LEFT OUTER JOIN (
    SELECT ZZZ.src_pract_no
    , MAX(ZZZ.pract_rpt_name) PRACT_RPT_NAME
    FROM smsdss.pract_dim_v AS ZZZ
    GROUP BY src_pract_no
) AS MD
ON LEFT(HL7.PRIM_CARE_PROV_NAME_ID, 6) = MD.SRC_PRACT_NO

Мой вопросВот почему это не сработало, и это то, что я изначально пробовал, что не дало бы никаких результатов:

LEFT OUTER JOIN (
    SELECT TOP 1 ZZZ.src_pract_no
    , MAX(ZZZ.pract_rpt_name) PRACT_RPT_NAME
    FROM smsdss.pract_dim_v AS ZZZ
) AS MD
ON LEFT(HL7.PRIM_CARE_PROV_NAME_ID, 6) = MD.SRC_PRACT_NO

Я также пытался:

LEFT OUTER JOIN smsdss.pract_dim_v AS MD
ON LEFT(HL7.PRIM_CARE_PROV_NAME_ID, 6) = (
    SELECT TOP 1 SRC_PRACT_NO
    , PRACT_RPT_NAME
    FROM SMSDSS.PRACT_DIM_V
)

Я думаю, что никаких результатов не былоназад или, скорее, это не сработало, как я ожидал, потому что подзапрос оценивается только один раз для первого результата, который возвращается, не найдя совпадения, и затем все, но не уверен.

1 Ответ

0 голосов
/ 05 октября 2018

Я думаю, что вы хотите OUTER APPLY:

OUTER APPLY
(SELECT TOP 1 pd.pract_rpt_name
 FROM smsdss.pract_dim_v pd
 WHERE LEFT(HL7.PRIM_CARE_PROV_NAME_ID, 6) = pd.SRC_PRACT_NO
 -- ORDER BY ?
) MD

Используйте ORDER BY, если вы хотите конкретное имя (например, самое длинное или последнее), когда есть несколько совпадений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...