NULL wird bereits ignoriert, sodass Sie NULLIF verwenden können um 0 zu drehen auf NULL . Außerdem brauchen Sie DISTINCT nicht und Ihr WHERE auf ActualTime ist nicht sargfähig.
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 Ich habe keine Ahnung, was Table2 b ist ist in der ursprünglichen Abfrage für, da es keine Join-Bedingung dafür gibt, also habe ich sie aus meiner Antwort weggelassen.