NULL
est déjà ignoré, vous pouvez donc utiliser NULLIF
pour passer 0
à NULL
. De plus, vous n'avez pas besoin de DISTINCT
et votre WHERE
sur ActualTime
n'est pas 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 Je n'ai aucune idée de ce que Table2 b
est dans la requête d'origine car il n'y a pas de condition de jointure pour cela, donc je l'ai omis de ma réponse.