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

SQL QUERY hiển thị giữa các ngày dưới dạng ngày cụ thể + Dữ liệu thuộc về mỗi ngày!

Thông thường, tôi khuyên bạn nên có một bảng lịch tĩnh chứa danh sách ngày tháng tuần tự. Tuy nhiên, bằng cách sử dụng phương pháp tạo bảng lịch thông minh của Cade Roux, bạn sẽ có những thứ như sau:

;With Calendar As
    (
     Select Cast(Floor(Cast(@StartDate As float)) As datetime) As [Date]
     Union All
     Select DateAdd(d, 1, [Date])
     From Calendar
     Where DateAdd(d, 1, [Date]) < @EndDate
    )
Select C.[Date], R.Country, Sum(R.PeopleNeeded)
From Calendar As C
    Left Join Requests As R
        On C.[Date] Between R.[Start Date] And R.[End Date]
            And ( @Country Is Null Or R.Country = @Country )
Group By C.[Date], R.Country    
Option (MAXRECURSION 0); 

Bây giờ, nếu trường hợp bạn muốn lọc theo quốc gia sao cho những ngày duy nhất được trả về là những ngày được trả về cho quốc gia nhất định có dữ liệu, thì bạn chỉ cần thay đổi Kết nối bên trái thành Tham gia bên trong.

BỔ SUNG

Từ các nhận xét, nó được yêu cầu hiển thị cho tất cả các quốc gia cho dù họ có Yêu cầu hay không. Để làm điều đó, bạn cần tham gia chéo vào bảng Quốc gia:

With Calendar As
    (
     Select Cast(Floor(Cast(@StartDate As float)) As datetime) As [Date]
     Union All
     Select DateAdd(d, 1, [Date])
     From Calendar
     Where DateAdd(d, 1, [Date]) < @EndDate
    )
Select C.[Date], C2.Country, Sum(R.PeopleNeeded)
From Calendar As C
    Cross Join Countries As C2
    Left Join Requests As R
        On C.[Date] Between R.[Start Date] And R.[End Date]
            And R.CountryId = C2.CountryId
Group By C.[Date], C2.Country    
Option (MAXRECURSION 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. di chuyển dữ liệu từ MS SQL sang PostgreSQL?

  2. Chuyển đổi Datetime sang Unix timestamp

  3. Câu lệnh cập nhật đơn giản để tất cả các hàng được gán một giá trị khác

  4. Yêu cầu không thành công với trạng thái HTTP 401:IN SSRS trái phép

  5. Cách đơn giản để chuyển đổi các cột và hàng trong SQL?