NULL
sudah diabaikan sehingga Anda dapat menggunakan NULLIF
untuk mengubah 0
ke NULL
. Anda juga tidak perlu DISTINCT
dan WHERE
. Anda pada ActualTime
tidak 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 Saya tidak tahu apa Table2 b
ada dalam kueri asli karena tidak ada kondisi bergabung untuk itu, jadi hilangkan dari jawaban saya.