2009-05-27 10 views
9

Mam tabeli, że chcemy znaleźć pierwszą niezerową wartość od 3 (i tylko 3) Kolumny dla każdego identyfikatora zaczynając Col1 następnie COL2 następnie Col3Jak ustalić, która kolumna/wartość została wybrana przez operatora COALESCE?

Uwaga: Col3 nigdy nie jest NULL

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

Aby uzyskać prawidłowe wartości dla każdej kolumny używam następujące SQL SELECT

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

która zwraca następujące i działa dobrze

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

Czego chcę, to trzecia kolumna zwrócona wskazująca, w której kolumnie zakończyła się koalescencja. Poniżej znajduje się zestaw wyników, które chcę produkować:

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

Odpowiedz

16

Być może to będzie działać?

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

piękna. to takie proste rozwiązanie, które ma sens. Dziękuję Ci. –