sql-server – 基于列值更改的T-SQL递增计数器

前端之家收集整理的这篇文章主要介绍了sql-server – 基于列值更改的T-SQL递增计数器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有如下的样本表.该表按另一个未显示的列排序.我需要根据值列中的更改来增加计数器列值.请参阅下面的示例.如何在T-sql(sql Server 2014)中完成.
ID Value
1  3
2  3
3  2
4  2
5  2
6  3
7  0
8  0

预期产出:

ID Value Counter
1  3     1
2  3     1
3  2     2
4  2     2
5  2     2
6  3     3
7  0     4
8  0     4

解决方法

sql Server 2012及更高版本中,您可以拥有1)分析功能,以及2)运行总计:
declare @t table (
    Id int primary key,Value int not null
);

insert into @t (Id,Value)
values
(1,3),(2,(3,2),(4,(5,(6,(7,0),(8,0);

select sq.Id,sq.Value,sum(case when sq.pVal = sq.Value then 0 else 1 end) over(order by sq.Id) as [Counter]
from (
    select t.Id,t.Value,lag(t.Value,1,null) over(order by t.Id) as [pVal]
    from @t t
) sq
order by sq.Id;

此外,该解决方案不依赖于没有间隙的ID列.

猜你在找的MsSQL相关文章