gpt4 book ai didi

sql - 取决于条件的 Row_number()

转载 作者:行者123 更新时间:2023-12-04 02:25:34 30 4
gpt4 key购买 nike

我有一个包含零的列和一个保留顺序的列,其中零表示数据片段之间的中断。这是例子

A Ord
1 1
1 2
0 3
0 4
0 5
1 6
1 7
1 8
0 9
1 10

我想要获得的是同一列,其中零(或零)之后的所有元素与之前的非零元素包相比增加 1。因此,上面的示例在转换后必须如下所示:

A Ord
1 1
1 2
0 3
0 4
0 5
2 6
2 7
2 8
0 9
3 10

每组中 0 和 1 的个数可以是任意的。我尝试使用 row_number() 和 join 的不同组合来做到这一点,但最终失败了。

最佳答案

如果您使用的是 SQL Server 2012,则可以使用 lag()sum() over()

select iif(T.A = 0, 0, sum(T.C) over(order by T.Ord rows unbounded preceding)) as A,
T.Ord
from (
select Y.A,
Y.Ord,
iif(Y.A = 1 and isnull(lag(Y.A) over(order by Y.Ord), 0) = 0, 1, 0) as C
from YourTable as Y
) as T

SQL Fiddle

关于sql - 取决于条件的 Row_number(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22343492/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com