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.