NULL
はすでに無視されているため、NULLIF
を使用できます 0
を回す NULL
へ 。また、DISTINCT
は必要ありません とあなたのWHERE
ActualTime
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私はTable2 b
が何であるかわかりません 結合条件がないため、元のクエリに含まれているため、回答から省略しています。