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

时间:2009-05-27 18:50:03

标签: sql sql-server tsql 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

要为每个值获取正确的列,请使用以下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

1 个答案:

答案 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