9

我有一个表,我希望从每个 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    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
4

1 回答 1

20

也许这会起作用?

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
于 2009-05-27T18:52:37.677 回答