2009-05-27 11 views
9

Iでcol2に、その後のCol1始まる各IDのために、私は3から最初の非ヌル値を見つけたいテーブル(及びわずか3)の列を有するCOL3COALESCE演算子がどの列/値を正常に選択したか把握するには?次いで

注COL3は

NULL決してありません

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 

私が望むのは、合体が成功した列を示す3番目の列です。

ID Col Source 
----------------------- 
1  A  Col1 
2  C  Col2 
3  X  Col3 
4  D  Col1 

答えて

16

おそらくこれはうまくいくでしょうか?

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 
+0

がきれいです。それは完璧な意味合いを持つような簡単な解決策です。ありがとうございました。 –

関連する問題