T-SQL左外部联接选择前1名-MAX

时间:2018-10-05 12:58:33

标签: sql sql-server tsql

我有一个表中的数据,如下所示:

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
)

我认为没有结果返回,或者它没有按我预期的那样工作,因为对于返回的第一个结果,子查询仅被评估一次,没有找到匹配项,就是这样,虽然不确定。

1 个答案:

答案 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