SQL возвращает ноль, если один столбец равен нулю (в противоположность COALESCE ()) - PullRequest
7 голосов
/ 17 ноября 2010

Заранее хотел бы поблагодарить за помощь. Это отличное сообщество, и я нашел здесь много ответов по программированию.

У меня есть таблица с несколькими столбцами, 5 из которых содержат даты или ноль.

Я хотел бы написать SQL-запрос, который по существу объединяет 5 столбцов в 1 столбец с условием, что если 1 из пяти столбцов содержит значение «NULL», возвращаемое значение равно нулю. По сути, в противоположность условию объединения возврата первого ненулевого значения, я хочу вернуть первое нулевое значение. Если ни одно из них не равно нулю, возвращение наибольшей из 5 дат будет оптимальным, однако я могу согласиться с возвратом любой из 5 дат.

    C1         C2          C3        C4        C5
    --         --          --        --        --
 1/1/1991   1/1/1991    1/1/1991  1/1/1991  2/2/1992
   NULL     1/1/1991    1/1/1991  1/1/1991  1/1/1991

Возврат запроса:

    C1
    --
 2/2/1992
   NULL

Большое спасибо.

(сервер MSSQL2008)

Ответы [ 6 ]

2 голосов
/ 17 ноября 2010
select greatest(c1, c2, c3, c4, c5)
from table;

Жизнь может быть такой простой: -)

(редактировать: работает на Oracle)

1 голос
/ 17 ноября 2010

Не задумываясь:

SELECT
  CASE WHEN c1 is null or c2 is null or c3 is null or c4 is null or c5 is null
       THEN null
       ELSE c1
  END
FROM mytable

Моя редакция выглядит следующим образом:

CASE 
 WHEN (c1 >= c2 AND c1 >= c3) THEN c1
 WHEN (c2 >= c1 AND c2 >= c3) THEN c2
 WHEN (c3 >= c1 AND c3 >= c2) THEN c3
END
1 голос
/ 17 ноября 2010

Попробуйте это:

SELECT
    CASE WHEN t1.SomeDate IS NULL THEN NULL ELSE MAX(t1.SomeDate) END AS TheVal
FROM
(
SELECT C1 AS SomeDate FROM Table_1
UNION ALL
SELECT C2 AS SomeDate  FROM Table_1
UNION ALL
SELECT C3 AS SomeDate FROM Table_1
UNION ALL
SELECT C4 AS SomeDate FROM Table_1
UNION ALL
SELECT C5 AS SomeDate FROM Table_1
) t1
GROUP BY
t1.SomeDate
0 голосов
/ 20 июня 2019

возможно изменение coalesce (заменить -1 недопустимым значением)?

ВЫБЕРИТЕ СЛУЧАЙ ПРИ КОЛЕСАЦИИ (C1, C2, C3, C4, C5, -1) = -1, ТОЛЬКО NULL ELSE COALESCE (C1, C2, C3, C4, C5) КОНЕЦ

0 голосов
/ 17 ноября 2010
SELECT 
    CASE WHEN C1 IS NULL THEN C2 WHEN C1 IS NULL AND C2 IS NULL THEN C3 WHEN C1 IS NULL AND C2 IS NULL AND C3 IS NULL THEN C4 WHEN C1 IS NULL AND C2 IS NULL AND C3 IS NULL AND C4 IS NULL THEN C5 ELSE C1 END AS REQUIREDNOTNULLVALUE 
FROM 
TABLE1
0 голосов
/ 17 ноября 2010

Может быть, с МЕНЬШЕ ?Я не знаю, как это работает с NULL.

...