Найти пустые значения между диапазонами столбцов в таблице в SQL - PullRequest
0 голосов
/ 26 октября 2018

У меня есть таблица, как показано на скриншоте.Ожидаемый результат выделен цветомобработайте тогда значения будут пустыми, но есть значения для следующего этапа (выделены синим цветом).Если на последующем этапе значения отсутствуют, они пустые (выделены зеленым цветом). Я хочу различать значения зеленого и синего цветов.Я имею в виду значение столбца b, если оно пустое и имеет следующие этапы (в последующих столбцах есть значения).Значения столбца g, если он пуст и не имеет следующих этапов (нет значений в последующих столбцах)

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Для этого вам понадобится длинное выражение CASE.Вы можете немного сократить его, используя COALESCE и IIF, оба они преобразуются в выражения CASE:

SELECT
COALESCE(col1, IIF(col2 IS NULL AND col3 IS NULL AND col4 IS NULL AND col5 IS NULL AND col6 IS NULL, 'g', 'b')) AS col1,
COALESCE(col2, IIF(                 col3 IS NULL AND col4 IS NULL AND col5 IS NULL AND col6 IS NULL, 'g', 'b')) AS col2,
COALESCE(col3, IIF(                                  col4 IS NULL AND col5 IS NULL AND col6 IS NULL, 'g', 'b')) AS col3,
COALESCE(col4, IIF(                                                   col5 IS NULL AND col6 IS NULL, 'g', 'b')) AS col4,
COALESCE(col5, IIF(                                                                    col6 IS NULL, 'g', 'b')) AS col5,
COALESCE(col6, 'g')                                                                                             AS col6
0 голосов
/ 26 октября 2018

Ну, вы можете использовать гигантские выражения:

select (case when col1 is null and (col2 is not null or col3 is not null or col4 is not null or col5 is not null or col6 is not null)
             then 'b'
             when col1 is null
             then 'g'
             else col1
        end) as col1,
       (case when col2 is null and (col1 is not null or col3 is not null or col4 is not null or col5 is not null or col6 is not null)
             then 'b'
             when col2 is null
             then 'g'
             else col2
        end) as col2,
       . . .
from t;
...