Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

T-sql Resetuj numer wiersza przy zmianie pola

Jeśli korzystasz z SQL Server 2012, możesz użyć LAG aby porównać wartość z poprzednim wierszem i możesz użyć SUMA i KONIEC aby zapisać zmiany.

with C1 as
(
  select custno,
         moddate,
         who,
         lag(who) over(order by moddate) as lag_who
  from chr
),
C2 as
(
  select custno,
         moddate,
         who,
         sum(case when who = lag_who then 0 else 1 end) 
            over(order by moddate rows unbounded preceding) as change 
  from C1
)
select row_number() over(partition by change order by moddate) as RowID,
       custno,
       moddate,
       who
from C2

Skrzypce SQL

Aktualizacja:

Wersja dla SQL Server 2005. Używa rekursywnego CTE i tabeli tymczasowej do pośredniego przechowywania danych, nad którymi musisz iterować.

create table #tmp
(
  id int primary key,
  custno int not null,
  moddate datetime not null,
  who varchar(10) not null
);

insert into #tmp(id, custno, moddate, who)
select row_number() over(order by moddate),
       custno,
       moddate,
       who
from chr;

with C as
(
  select 1 as rowid,
         T.id,
         T.custno,
         T.moddate,
         T.who,
         cast(null as varchar(10)) as lag_who
  from #tmp as T
  where T.id = 1
  union all
  select case when T.who = C.who then C.rowid + 1 else 1 end,
         T.id,
         T.custno,
         T.moddate,
         T.who,
         C.who
  from #tmp as T
    inner join C
      on T.id = C.id + 1
)
select rowid,
       custno,
       moddate,
       who
from C
option (maxrecursion 0);

drop table #tmp;

Skrzypce SQL



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaktualizuj wiele wierszy za pomocą instrukcji select

  2. Nie można powiązać wieloczęściowego identyfikatora w SQL Server 2008

  3. Problemy z wdrażaniem bazy danych

  4. Sterownik sqlsrv 4.0 nie działa w phpinfo()

  5. Jak utworzyć klucz obcy w SQL Server?