2009-05-27 4 views
9

Ich habe eine Tabelle, die ich den ersten Nicht-Null-Wert von 3 (und nur 3) Spalten für jede ID beginnend mit Col1 dann Col2 dann Col3Wie kann man herausfinden, welche Spalte/Wert der Operator COALESCE erfolgreich ausgewählt hat?

Hinweis finden möchte: Col3 ist NIE NULL

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

Um die richtige Spalte für jeden Wert erhalte ich die folgende SQL-Select verwenden

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

die folgende und arbeitet wieder ganz gut

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

Was ich will ist eine dritte Spalte zurückgegeben, die angibt, in welcher Spalte die Coalesce erfolgreich war. Das folgende ist die Ergebnismenge, die ich herstellen möchte:

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

Antwort

16

Vielleicht funktioniert das?

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

schön. Es ist so eine einfache Lösung, die vollkommen Sinn macht. Danke. –

Verwandte Themen