NULL
er allerede ignoreret, så du kan bruge NULLIF
for at slå 0
til NULL
. Du behøver heller ikke DISTINCT
og din WHERE
på ActualTime
er ikke sargerbar.
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 Jeg aner ikke hvad Table2 b
er i den oprindelige forespørgsel, da der ikke er nogen join-betingelse for det, så har udeladt det fra mit svar.