9

在此之前,我想对您的帮助表示感谢。这是一个很棒的社区,我在这里找到了许多编程答案。

我有一个包含多个列的表,其中 5 个包含日期或空值。

我想编写一个 sql 查询,基本上将 5 列合并为 1 列,条件是如果 5 列中的 1 列包含“NULL”值,则返回值为 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)

4

6 回答 6

4
select greatest(c1, c2, c3, c4, c5)
from table;

生活可以如此简单:-)

(编辑:适用于甲骨文)

于 2010-11-17T15:52:58.797 回答
1

不用多想:

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
于 2010-11-17T19:24:46.097 回答
1

尝试这个:

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
于 2010-11-17T15:53:24.597 回答
0

也许是合并的变体(将 -1 替换为无效值)?

当 COALESCE(C1,C2,C3,C4,C5,-1) = -1 THEN NULL ELSE COALESCE(C1,C2,C3,C4,C5) END 时选择 CASE

于 2019-06-20T01:45:16.843 回答
-1

也许最少?我不知道这如何与 NULL 一起使用。

于 2010-11-17T15:50:39.577 回答
-2
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
于 2010-11-17T18:08:02.970 回答