Как определить, какой столбец / значение успешно выбрал оператор COALESCE?

У меня есть таблица, в которой я хочу найти первое ненулевое значение из 3 (и только 3) столбцов для каждого идентификатора, начиная с Col1, затем до Col2, затем до Col3

Примечание: Col3 НИКОГДА НЕ ПУСТО

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

Чтобы получить правильный столбец для каждого значения, я использую следующий SQL Select

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

person Jon Erickson    schedule 27.05.2009    source источник


Ответы (1)


Возможно, это сработает?

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
person Lasse V. Karlsen    schedule 27.05.2009
comment
красивая. это такое простое решение, которое имеет смысл. Спасибо. - person Jon Erickson; 28.05.2009