Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL - comment générer des lignes pour chaque mois en fonction des plages de dates dans l'ensemble de données existant ?

Je trouve qu'il est plus facile d'aborder ces problèmes en créant une liste d'entiers, puis en l'utilisant pour incrémenter les dates. Voici un exemple :

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;