Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL - Sostituisci le righe ripetute con valori null mantenendo il numero di righe

Puoi farlo enumerando le righe entro un anno. Quindi aggiorna tutti tranne il primo:

with toupdate as (
      select t.*, row_number() over (partition by [year] order by [date]) as seqnum
      from t
     )
update toupdate
    set [year] = NULL
    where seqnum > 1;

Se lo vuoi come select dichiarazione:

with ts as (
      select t.*, row_number() over (partition by [year] order by [date]) as seqnum
      from t
     )
select [date],
       (case when seqnum = 1 then [year] end) as [year]
from ts;