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
е в оригиналната заявка, тъй като за нея няма условие за присъединяване, затова я пропуснах от отговора си.