Row_number()取决于条件

你为什么

我有一列带有零,而一列具有保留的顺序,其中零表示数据段之间的中断。这是例子

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

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

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

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

米凯尔·埃里克森(Mikael Eriksson)

如果您使用的是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小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章