Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL - como gerar linhas para cada mês com base em intervalos de datas no conjunto de dados existente?


Acho mais fácil abordar esses problemas criando uma lista de números inteiros e usando-a para incrementar as datas. Aqui está um exemplo:
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;