Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server:Как да изберете всички дни в диапазон от време, дори ако няма данни за няколко дни

Можете да използвате рекурсивен CTE, за да създадете своя списък от 30 дни, след което да го присъедините към вашите данни

--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. Инсталиране на екземпляр на клъстер за отказване на SQL Server – част 1

  2. Има ли .NET еквивалент на newsequentialid() на SQL Server

  3. Как да изпратите HTML имейл от SQL Server (T-SQL)

  4. Брент Озар обяснява вътрешната и външната фрагментация на SQL Server

  5. Как да коригирате конфликт на съпоставяне в заявка на SQL Server?