事先,我想感谢你的帮助。这是一个很棒的社区,我在这里找到了许多编程答案。
我有一个包含多个列的表,其中5个包含日期或null。
我想编写一个sql查询,它基本上将5列合并为1列,条件是如果五列中的一列包含“NULL”值,则返回的值为null。基本上与返回第一个非null的合并条件相反,我想返回第一个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)
答案 0 :(得分:2)
select greatest(c1, c2, c3, c4, c5)
from table;
生活可以如此简单: - )
(编辑:适用于Oracle)
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:0)
也许是合并的变体(将-1替换为无效值)?
当COALESCE(C1,C2,C3,C4,C5,-1)= -1时选择情况,然后选择NULL ELSE COALESCE(C1,C2,C3,C4,C5)END
答案 4 :(得分:-1)
也许使用LEAST? 我不知道这是如何工作的。
答案 5 :(得分:-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