Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server:Cách chọn tất cả các ngày trong một phạm vi ngày ngay cả khi không có dữ liệu nào tồn tại trong một số ngày

Bạn có thể sử dụng CTE đệ quy để tạo danh sách 30 ngày, sau đó kết hợp CTE đó với dữ liệu của bạn

--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. Câu lệnh UPDATE xung đột với ràng buộc THAM KHẢO - Hướng dẫn SQL Server / TSQL Phần 76

  2. Truy vấn chặn máy chủ SQL

  3. Gọi thủ tục được lưu trữ với giá trị trả về

  4. Năm cân nhắc hàng đầu khi thiết kế chỉ mục cơ sở dữ liệu trong SQL Server

  5. Tạo một bảng tạm thời dựa trên một bảng khác trong SQL Server