我有一个表,我希望从每个ID的3个(也是3个)列中找到第一个非空值,从Col1开始,然后到Col2,再到Col3
注意:Col3永远不会为空
ID Col1 Col2 Col3
------------------------------
1 A B X
2 NULL C X
3 NULL NULL X
4 D NULL X
要为每个值获取正确的列,请使用以下SQL Select
SELECT ID,
COALESCE(Col1, Col2, Col3) AS Col
FROM MyTable
返回以下内容并且工作正常
ID Col
-------------
1 A
2 C
3 X
4 D
我想要的是返回的第三列,指示合并成功的列。以下是我希望产生的结果集:
ID Col Source
-----------------------
1 A Col1
2 C Col2
3 X Col3
4 D Col1
答案 0 :(得分:18)
也许这会奏效吗?
SELECT ID,
COALESCE(Col1, Col2, Col3) AS Col,
CASE COALESCE(Col1, Col2, Col3)
WHEN Col1 THEN 'Col1'
WHEN Col2 THEN 'Col2'
WHEN Col3 THEN 'Col3'
ELSE 'Unknown'
END AS Source
FROM MyTable