9

Col1、Col2、Col3の順に各IDの3つ(そして3つだけ)の列から最初のnull以外の値を見つけたいテーブルがあります。

注:Col3は決してNULLではありません

ID    Col1    Col2    Col3
------------------------------
1     A       B       X
2     NULL    C       X
3     NULL    NULL    X
4     D       NULL    X

各値の正しい列を取得するには、次のSQLSelectを使用します

SELECT    ID,
          COALESCE(Col1, Col2, Col3) AS Col
FROM      MyTable

これは以下を返し、問題なく動作します

ID    Col
-------------
1     A
2     C
3     X
4     D

私が欲しいのは、合体が成功した列を示す3番目の列が返されることです。以下は、私が作成したい結果セットです。

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 に答える