鉴于下表:
ID | Value
----------
1 | NULL
2 | B
3 | C
4 | NULL
我想根据不同的顺序从 Value 列中获取第一个非空值,例如:
SELECT FIRST_NON_NULL(Value ORDER BY ID) FROM MY_TABLE
这将返回 B
SELECT FIRST_NON_NULL(Value ORDER BY ID DESC) FROM MY_TABLE
这将返回 C
附言不必是值函数,只需是需要的 SELECT 语句。谢谢你。
编辑:想看看是否可以有一个可扩展的版本。
ID | Value1 | Value2
--------------------
1 | NULL | AA
2 | B | NULL
3 | C | CC
4 | NULL | NULL
SELECT FIRST_NON_NULL(Value1, Value2 ORDER BY ID) FROM MY_TABLE
这将返回 B, AA
SELECT FIRST_NON_NULL(Value1, Value2 ORDER BY ID DESC) FROM MY_TABLE
这将返回 C, CC
最佳答案
做就是了 :
SELECT TOP 1 Value
FROM mytable
WHERE Value IS NOT NULL
ORDER BY ID
要获得最后一个非空值,请切换排序:
ORDER BY ID DESC
要将相同的逻辑扩展到更多列,您可以使用以下查询:
SELECT (SELECT TOP 1 Value1 FROM mytable
WHERE Value1 IS NOT NULL ORDER BY ID) AS min_Value1,
(SELECT TOP 1 Value2 FROM mytable
WHERE Value2 IS NOT NULL ORDER BY ID) AS min_Value2
Demo here
关于SQL 以任意顺序查找第一个非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45206136/