返回匹配一系列条件的第一个ID

时间:2014-01-14 19:24:47

标签: sql sql-server

创建并填充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

谢谢

1 个答案:

答案 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。如果有,那么你需要一个更复杂的版本。