2009-05-27 5 views
9

J'ai une table que je souhaite trouver la première valeur non nulle de 3 (et seulement 3) colonnes pour chaque ID commençant par Col1 puis Col2 puis Col3Comment déterminer quelle colonne/valeur l'opérateur COALESCE a sélectionné avec succès?

Note: Col3 est jamais NULL

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

pour obtenir la bonne colonne pour chaque valeur que j'utilise Select SQL suivante

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

qui retourne ce qui suit et fonctionne très bien

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

Ce que je veux, c'est une troisième colonne retournée indiquant la colonne sur laquelle la fusion a réussi. Ce qui suit est le jeu de résultats que je souhaite produire:

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

Répondre

16

Peut-être que cela fonctionnera?

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

belle. C'est une solution tellement simple et logique. Je vous remercie. –

Questions connexes