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

Chọn tất cả các ngày từ một bảng trong một phạm vi ngày và bao gồm 1 hàng cho mỗi ngày trống

Có một số cách để xử lý các hàng bị thiếu, nhưng tất cả đều là về việc có một bộ dữ liệu khác để kết hợp với kết quả hiện tại của bạn.

Điều đó có thể bắt nguồn từ kết quả của bạn, được tạo bởi CTE hoặc quy trình khác (chẳng hạn như ví dụ của bạn) hoặc (tùy chọn của tôi) bằng cách sử dụng mẫu vĩnh viễn tham gia chống lại.

Mẫu trong trường hợp của bạn có thể chỉ là một bảng ngày tháng, như @datesTBL của bạn. Sự khác biệt là nó được tạo ra trước, ví dụ, có giá trị 100 năm.

Khi đó, truy vấn của bạn có thể tương tự với ví dụ của bạn, nhưng tôi sẽ thử như sau ...

SELECT 
    dt.tempDate ,
    InstructorID,           EventStart, 
    EventEnd,               cancelled, 
    cancelledInstructor, 
    EventType,              DevName, 
    Room,                   SimLocation, 
    ClassLocation,          Event, 
    Duration,               TrainingDesc, 
    Crew,                   Notes, 
    LastAmended,            InstLastAmended, 
    ChangeAcknowledged,     Type, 
    OtherType,              OtherTypeDesc, 
    CourseType 
FROM 
  @datesTBL dt 
LEFT OUTER JOIN
  OpsInstructorEventsView iv
    ON  iv.EventStart >= dt.tempDate
    AND iv.EventStart <  dt.tempDate + 1
    AND iv.InstructorID = @InstructorID 
WHERE
      dt.tempDate >= @StartDate
  AND dt.tempDate <= @EndDate
ORDER BY
  dt.tempDate,
  iv.EventStart

Điều này đặt mẫu lịch trên LEFT, và do đó, làm cho nhiều truy vấn dễ dàng hơn vì bạn biết trường ngày của lịch luôn được điền, luôn là giá trị chỉ ngày (không có phần thời gian), theo thứ tự, rất đơn giản để GROUP BY, v.v.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hủy chia với tên cột

  2. Chèn dữ liệu không trùng lặp từ bảng mẹ vào bảng con trong SQL server 2008

  3. Các gói SQL Server:sự khác biệt giữa Quét chỉ mục / Tìm kiếm chỉ mục

  4. Truy vấn hợp nhất nhiều hàng thành các hàng riêng biệt với nhiều cột

  5. Hạn chế quyền truy cập của người dùng vào bảng bằng Sql Server 2008