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

SQL:come posso generare righe per ogni mese in base agli intervalli di date nel set di dati esistente?

Trovo più semplice affrontare questi problemi creando un elenco di numeri interi e quindi utilizzandolo per incrementare le date. Ecco un esempio:

with nums as (
      select 0 as n
      union all
      select n + 1 as n
      from nums
      where n < 11
     )
select rowid, datestart, dateend,
       year(dateadd(month, n.n, datestart)) as yr,
       month(dateadd(month, n.n, datestart)) as mon
from table t join
     nums n
     on dateadd(month, n.n - 1, datestart) <= dateend;