sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server:Hur man väljer alla dagar i ett datumintervall även om det inte finns någon data på några dagar

Du kan använda en rekursiv CTE för att bygga upp din lista på 30 dagar och sedan koppla den till din data

--test
select cast('05 jan 2011' as datetime) as DT, 1 as val into #t
union all select CAST('05 jan 2011' as datetime), 1 
union all select CAST('29 jan 2011' as datetime), 1 

declare @start datetime = '01 jan 2011'
declare @end   datetime = dateadd(day, 29, @start)

;with amonth(day) as
(
    select @start as day
        union all
    select day + 1
        from amonth
        where day < @end
)
select amonth.day, count(val)
    from amonth 
    left join #t on #t.DT = amonth.day
group by amonth.day


>>

2011-01-04 00:00:00.000 0
2011-01-05 00:00:00.000 2
2011-01-06 00:00:00.000 0
2011-01-07 00:00:00.000 0
2011-01-08 00:00:00.000 0
2011-01-09 00:00:00.000 0
...


  1. Vad är poängen med Initial Catalog i en SQL Server-anslutningssträng?

  2. En översikt över databasdiagramverktyg tillgängliga för PostgreSQL

  3. Vad är skillnaden mellan char, nchar, varchar och nvarchar i SQL Server?

  4. Fyller Many2many-fältet (odoo 8)