小编典典

如何确定COALESCE运算符成功选择了哪个列/值?

sql

我有一个表,希望从每个ID的3(只有3)列中找到第一个非空值,从Col1开始,然后到Col2,再到Col3

注意:Col3为NEVER 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

阅读 209

收藏
2021-04-19

共1个答案

小编典典

也许这行得通吗?

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
2021-04-19