Как определить, какой столбец / значение успешно выбран оператор COALESCE? - PullRequest
9 голосов
/ 27 мая 2009

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

Примечание: Col3 никогда не равен NULL

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

1 Ответ

18 голосов
/ 27 мая 2009

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

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
...