SQL Server 如何在SQL中根据条件重新设置运行计数,从1开始,并使前一行值为0?

ewm0tg9j  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(196)

例如,有一些表格包含以下数据:

No    Id    Value
1    100    1
2    100    0
3    100    1
4    100    2

1    101    1
2    101    2

1    102    0
2    102    1

我必须编写SQL查询,它将根据特定条件返回行计数。如果值匹配0,则需要重置运行计数,并从1开始,使前一行值为0
所以结果会是这样的:

No    Id    Value    Running Count
1    100    1       0
2    100    0       0
3    100    1       1
4    100    1       2

1    101    1       1
2    101    2       2

1    102    1       0
2    102    0       0
xyhw6mcr

xyhw6mcr1#

你的示例数据集非常有限,所以我不能确定所有的边缘情况,但看看下面的工作是否适合你,如果不是,它可能会帮助你到达那里。
它使用window & case表达式获取一个运行计数,并使用 lead 检查下一个值。
如果当前值或下一个值为0,则计数为0,否则,如果Id块中存在0,则计数为运行计数减1,表示计数已重置。

select No, Id, Value, 
  case when value = 0 or nv = 0 
  then 0 
  else 
    rc - case when Min(value) over(partition by id) = 0 then 1 else 0 end
  end Running_Count
from (
  select *, 
    Sum(case when value = 0 then 0 else 1 end) over(partition by id order by no) rc,
    Lead(Value) over(partition by Id order by No)nv
  from t
)t;

相关问题