sql >> Databasteknik >  >> RDS >> Sqlserver

SQL - hur genererar jag rader för varje månad baserat på datumintervall i befintlig datauppsättning?

Jag tycker att det är lättast att närma sig dessa problem genom att skapa en lista med heltal och sedan använda den för att öka datumen. Här är ett exempel:

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;


  1. Hitta senaste dubbletter av ID med MySQL

  2. SQLServer IDENTITY Kolumn med text

  3. Konstig SQL Server-vydefinition

  4. UNION vs DISTINCT i prestanda