9 Stimmen

Wie lässt sich herausfinden, welche Spalte/welcher Wert vom COALESCE-Operator erfolgreich ausgewählt wurde?

Ich habe eine Tabelle, die ich den ersten Nicht-Null-Wert aus 3 (und nur 3) Spalten für jede ID beginnend mit Col1 dann zu Col2 dann zu Col3 finden möchten

Hinweis: Spalte 3 ist NIEMALS 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 zu erhalten, verwende ich den folgenden SQL Select

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

das folgendes Ergebnis liefert und einwandfrei funktioniert

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

Ich möchte, dass eine dritte Spalte zurückgegeben wird, die angibt, für welche Spalte die Zusammenführung erfolgreich war. Im Folgenden ist die Ergebnismenge aufgeführt, die ich erzeugen möchte:

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

20voto

Lasse V. Karlsen Punkte 364542

Vielleicht klappt das ja?

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X