NULL
já está ignorado, então você pode usar NULLIF
para virar 0
para NULL
. Além disso, você não precisa de DISTINCT
e seu WHERE
em ActualTime
não é sargável. 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 Não tenho ideia do que
Table2 b
está na consulta original, pois não há condição de junção para ela, então a omiti da minha resposta.