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

Jon*_*son 9 sql t-sql sql-server sql-server-2000 coalesce

我有一个表,我希望从每个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
Run Code Online (Sandbox Code Playgroud)

要为每个值获取正确的列,请使用以下SQL Select

SELECT    ID,
          COALESCE(Col1, Col2, Col3) AS Col
FROM      MyTable
Run Code Online (Sandbox Code Playgroud)

返回以下内容并且工作得很好

ID    Col
-------------
1     A
2     C
3     X
4     D
Run Code Online (Sandbox Code Playgroud)

我想要的是返回的第三列,指示合并成功的列.以下是我希望生成的结果集:

ID    Col    Source
-----------------------
1     A      Col1
2     C      Col2
3     X      Col3
4     D      Col1
Run Code Online (Sandbox Code Playgroud)

ang*_*son 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
Run Code Online (Sandbox Code Playgroud)