Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL - Wie generiere ich Zeilen für jeden Monat basierend auf Datumsbereichen in einem vorhandenen Dataset?

Ich finde es am einfachsten, diese Probleme anzugehen, indem ich eine Liste von ganzen Zahlen erstelle und diese dann verwende, um die Daten zu erhöhen. Hier ist ein Beispiel:

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;