NULL はすでに無視されているため、NULLIFを使用できます 0を回す NULLへ 。また、DISTINCTは必要ありません とあなたのWHERE ActualTime 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私はTable2 bが何であるかわかりません 結合条件がないため、元のクエリに含まれているため、回答から省略しています。