创建并填充POC表:
CREATE TABLE #POCSTBL (SCode varchar(10))
INSERT INTO #POCSTBL (SCode)
SElECT 'LC13'
UNION ALL
SELECT 'LC22'
UNION ALL
SELECT 'LC31'
CREATE TABLE #POCLUTBL (ID int Identity (1,1), LC1 varchar(10), LC2 varchar(10), LC3 varchar(10))
INSERT INTO #POCLUTBL (LC1, LC2, LC3)
SELECT 'LC11',NULL,'LC13'
UNION ALL
SELECT 'LC21','LC13',NULL
UNION ALL
SELECT '-','LC31','LC33'
SELECT * FROM #POCSTBL
SELECT * FROM #POCLUTBL
我的初步尝试:
SELECT S.SCode, LU.ID FROM #POCSTBL S LEFT JOIN #POCLUTBL LU
ON S.SCode = LU.LC1 OR S.SCode = LU.LC2 OR S.SCode = LU.LC3
掉落#Tbls:
DROP TABLE #POCSTBL
DROP TABLE #POCLUTBL
期望的输出:
SCode ID
LC13 2
LC22 NULL
LC33 3
我想从#POCSTBL查找#POCLUTBL的SCode列 首先是LC2,如果找到,则将该ID作为输出, 如果找不到ID,则LC1(如果找到)将该ID作为输出, 如果找不到ID,则LC3(如果找到)将该ID作为输出, 如果未找到ID,则ID = NULL
谢谢
答案 0 :(得分:1)
像这样:
SELECT
S.SCode,
COALESCE(L1.ID, L2.ID, L3.ID) As ID
FROM #POCSTBL S
LEFT JOIN #POCLUTBL L1 ON S.SCode = L1.LC1
LEFT JOIN #POCLUTBL L2 ON S.SCode = L2.LC2
LEFT JOIN #POCLUTBL L3 ON S.SCode = L3.LC3
假设LC1,LC2或LC3中没有潜在的重复SCode。如果有,那么你需要一个更复杂的版本。