NULL पहले ही अनदेखा कर दिया गया है ताकि आप NULLIF का उपयोग कर सकें 0 . को चालू करने के लिए करने के लिए NULL . इसके अलावा आपको DISTINCT . की आवश्यकता नहीं है और आपका WHERE पर ActualTime सारगर्भित नहीं है।
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'
पीएस मुझे नहीं पता कि Table2 b . क्या है मूल प्रश्न में है क्योंकि इसमें शामिल होने की कोई शर्त नहीं है इसलिए इसे मेरे उत्तर से हटा दिया गया है।