T-SQL incrementing counter based on change in a column value

前端 未结 1 1351
粉色の甜心
粉色の甜心 2020-12-10 22:10

I have sample table like below. The table is sorted by another column that is not shown. I need to increment a counter column value based on whenever there is change in the

相关标签:
1条回答
  • 2020-12-10 22:27

    In SQL Server 2012 and later, you have the luxury of 1) analytic functions, and 2) running totals:

    declare @t table (
        Id int primary key,
        Value int not null
    );
    
    insert into @t (Id, Value)
    values
    (1, 3),
    (2, 3),
    (3, 2),
    (4, 2),
    (5, 2),
    (6, 3),
    (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;
    

    Also, this solution does not depend on ID column having no gaps.

    0 讨论(0)
提交回复
热议问题