NULL
ignoreras redan så du kan använda NULLIF
för att vända 0
till NULL
. Du behöver inte heller DISTINCT
och din WHERE
på ActualTime
är inte sargbar.
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 Jag har ingen aning om vad Table2 b
finns i den ursprungliga frågan eftersom det inte finns något kopplingsvillkor för det så har utelämnat det från mitt svar.