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

Nhận AVG bỏ qua giá trị Null hoặc Zero

NULL đã bị bỏ qua nên bạn có thể sử dụng NULLIF để chuyển 0 thành NULL . Ngoài ra, bạn không cần DISTINCTWHERE của bạn trên ActualTime không thể phân biệt được.

SELECT AVG(cast(NULLIF(a.SecurityW, 0) AS BIGINT)) AS Average1,
       AVG(cast(NULLIF(a.TransferW, 0) AS BIGINT)) AS Average2,
       AVG(cast(NULLIF(a.StaffW, 0) AS BIGINT))    AS Average3
FROM   Table1 a
WHERE  a.ActualTime >= '20130401'
       AND a.ActualTime < '20130501' 

Tái bút Tôi không biết Table2 b gì nằm trong truy vấn ban đầu vì không có điều kiện kết hợp cho nó, vì vậy tôi đã bỏ qua nó khỏi câu trả lời của tôi.



  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ách sử dụng Sắp xếp (Thứ tự Theo) trong Câu lệnh Chọn trong SQL Server - Hướng dẫn SQL Server / TSQL Phần 109

  2. Nối các giá trị cột vào một danh sách được phân tách bằng dấu phẩy

  3. SQL Server 2008- Nhận các ràng buộc bảng

  4. SQL Server Tính khả dụng cao:Thêm đĩa mới vào phiên bản cụm chuyển đổi dự phòng hiện có

  5. Các ràng buộc có thể hoãn lại trong SQL Server