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

Вземете AVG, пренебрегвайки Null или Zero стойности

NULL вече е игнориран, така че можете да използвате NULLIF за да завъртите 0 до NULL . Също така нямате нужда от DISTINCT и вашето WHERE на ActualTime не подлежи на саргиране.

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' 

PS Нямам представа какво Table2 b е в оригиналната заявка, тъй като за нея няма условие за присъединяване, затова я пропуснах от отговора си.



  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 - SQL Server / T-SQL урок, част 54

  2. Предоставяне Изберете на изглед, а не на основна таблица, когато основната таблица е в друга база данни

  3. някакво ограничение на броя на връзките със SQL Server?

  4. Зависимости на SQL сървър

  5. Какво е SQL Server? (Определение, версии, издания)