Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server:Jak wybrać wszystkie dni w zakresie dat, nawet jeśli przez kilka dni nie ma żadnych danych

Możesz użyć rekursywnego CTE, aby zbudować swoją 30-dniową listę, a następnie dołączyć ją do swoich danych

--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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa OBJECTPROPERTYEX() w SQL Server

  2. Jak mogę wypełnić kolumnę liczbami losowymi w SQL? Otrzymuję tę samą wartość w każdym rzędzie

  3. Funkcja SQL Server ROUND():do czego służy i dlaczego powinno cię to obchodzić?

  4. WHERE IN (tablica identyfikatorów)

  5. Dzielenie wartości rozdzielonych przecinkami w kolumnach na wiele wierszy w Sql Server