我有一个表中的数据,如下所示:
encounter | prov_id_name
---------------------------
12345678 | 123456ProviderA
然后我想将其与维度表中的提供者ID匹配,而不是如果暗表中存在匹配项,则不拉入子字符串。
尺寸表如下所示:
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
)
我认为没有结果返回,或者它没有按我预期的那样工作,因为对于返回的第一个结果,子查询仅被评估一次,没有找到匹配项,就是这样,虽然不确定。
答案 0 :(得分:2)
我认为您想要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
。