我有一个表,我希望从 Col1 开始,然后到 Col2,然后到 Col3 的每个 ID 的 3 个(且只有 3 个)列中找到第一个非空值
注意:Col3 绝不为 NULL
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
最佳答案
也许这会起作用?
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
关于sql - 如何确定 COALESCE 运算符成功选择了哪一列/值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/917388/