我有下面的查询,我想在一个匹配中输入其中一个或两者。一个成员可以有多个ID或HIC。因此,如果member ID = member ID然后为当前的HIC拉出最大值(loaddate),同样地,如果HIC = HIC使用最大值(loaddate)拉入成员ID。我希望包括左联接,以防在这两种情况下都找不到匹配。
代码:
SELECT
CH1.*
,AVM.MBR_ID
,AVM.HIC
,AVM.MBR_LST_NM
,AVM.MBR_FST_NM
,CAST(AVM.MBR_BIRTH_DT AS DATE) AS 'MBR_BIRTH_DT'
,AVM.LOADDATE
FROM
#CHECK1 CH1
LEFT JOIN
AVRIL.DBO.VW_MBR AVM ON (CH1.HICN = AVM.HIC OR CH1.MEMBER_ID = AVM.MBR_ID)
WHERE
CH1.HEALTH_PLAN = 'AVRIL'
AND AVM.LOADDATE=(SELECT MAX(LOADDATE) FROM AVRIL.DBO.VW_MBR) 谢谢你,迈克尔
发布于 2015-04-23 20:09:08
当您在VW_MBR子句中使用where表中的字段时,它有效地将left join转换为inner join。将条件放在联接中:
...
FROM #CHECK1 CH1
LEFT JOIN AVRIL.DBO.VW_MBR AVM ON (CH1.HICN = AVM.HIC OR CH1.MEMBER_ID = AVM.MBR_ID)
AND AVM.LOADDATE=(SELECT MAX(LOADDATE) FROM AVRIL.DBO.VW_MBR)
WHERE CH1.HEALTH_PLAN = 'AVRIL' 发布于 2015-04-23 20:45:16
这里可能是第一个建议的答案的替代方案,我使用自定义查询作为连接来优化它(我只使用最大加载日期,而不是在表的每一行上尝试连接)。
SELECT CH1.*
,MAVM.MBR_ID
,MAVM.HIC
,MAVM.MAX_LOADDATE
FROM #CHECK1 CH1
LEFT JOIN (SELECT AVM.HIC
,AVM.MBR_ID
MAX(AVM.LOADDATE) AS [MAX_LOADDATE]
FROM AVRIL.DBO.VW_MBR AVM
GROUP BY AVM.HIC, AVM.MBR_ID) MAVM (MAVM.HIC = CH1.HICN
OR MAVM.MBR_ID = CH1.MEMBER_ID)
WHERE CH1.HEALTH_PLAN = 'AVRIL' 与其他建议的查询相比,我简化了查询,将重点放在更改上。您仍然可以向INNER JOIN添加一个AVRIL.DBO.VM_MBR子句,以便获得其他列:
...
LEFT JOIN (...) MAVM ...
INNER JOIN AVRIL.DBO.VW_MBR AVM2 ON AVM2.HIC = MAVM.HIC
AND AVM2.MBR_ID = MAVM.MBR_ID
AND AVM2.LOADDATE = MAVM.MAX_LOADDATE
...因此,您可以对要使用的列使用AVM2.xxx。
希望这能帮上忙
https://stackoverflow.com/questions/29833294
复制相似问题