获取分区中第一个非空值

问题描述 投票:0回答:1

由于SQL Server不支持

first_value
函数中的忽略空值,我们如何在不定义新列的情况下获取窗口中的第一个非空值?

我尝试使用

COALESCE()
,但它不能用作窗口函数。

sql-server t-sql window-functions non-nullable first-value
1个回答
1
投票

如前所述,

FIRST_VALUE
确实支持
IGNORE NULLS
(在 SQL Server 2022+ 中)。因此,您可以做:

FIRST_VALUE(YourColumn) IGNORE NULLS OVER (PARTITION BY SomeColumn ORDER BY AnotherColumn) AS FirstValue

在没有语法的情况下模拟

FIRST_VALUE
并不太困难,只需在列上的
CASE
中添加
ORDER BY
即可稍后对
NULL
值进行排序:

FIRST_VALUE(YourColumn) OVER (PARTITION BY SomeColumn ORDER BY CASE WHEN YourColumn IS NULL THEN 1 ELSE 0 END, OtherColumn)

这将强制将

NULL
的值稍后排序,因此如果所有值都是
NULL
,则只能是第一个值。

© www.soinside.com 2019 - 2024. All rights reserved.