sql >> Base de Datos >  >> RDS >> Sqlserver

SQL:¿cómo genero filas para cada mes según los rangos de fechas en el conjunto de datos existente?

Encuentro que es más fácil abordar estos problemas creando una lista de números enteros y luego usándolos para incrementar las fechas. Aquí hay un ejemplo:

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;