NULL вече е игнориран, така че можете да използвате NULLIF за да завъртите 0 до NULL . Също така нямате нужда от DISTINCT и вашето WHERE на ActualTime не подлежи на саргиране.
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 е в оригиналната заявка, тъй като за нея няма условие за присъединяване, затова я пропуснах от отговора си.