NULL
jest już ignorowany, więc możesz użyć NULLIF
aby zmienić 0
na NULL
. Również nie potrzebujesz DISTINCT
i Twój WHERE
w ActualTime
nie jest sargable.
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 Nie mam pojęcia co Table2 b
jest w pierwotnym zapytaniu, ponieważ nie ma warunku dołączenia do niego, więc pominąłem go w mojej odpowiedzi.