Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ottieni AVG ignorando i valori Null o Zero

NULL è già ignorato quindi puoi usare NULLIF per trasformare 0 a NULL . Inoltre non hai bisogno di DISTINCT e il tuo WHERE su ActualTime non è selezionabile.

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 Non ho idea di cosa Table2 b è nella query originale poiché non esiste una condizione di unione, quindi l'ho omesso dalla mia risposta.