NULL
je již ignorováno, takže můžete použít NULLIF
pro otočení 0
na NULL
. Také nepotřebujete DISTINCT
a vaše WHERE
v ActualTime
není možné protahovat.
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 Nemám ponětí, co Table2 b
je v původním dotazu pro, protože pro něj není žádná podmínka spojení, takže jsem ho z mé odpovědi vynechal.