2009-05-27 53 views
9

我有希望找到從3中的第一非空值(只有3)列,用於每ID開始Col1中然後了col2然後COL3如何確定COALESCE運營商成功選擇哪個列/值?

注意的表:COL3是NEVER 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 

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

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

很漂亮。這是一個非常合理的解決方案。謝謝。 – 2009-05-27 20:22:24