Jag ger mitt svar eftersom jag har stora tvivel om de andra svaren. Du måste vara försiktig med filterkrav. Kom ihåg att where-satsen körs efter dina joins . Så om det finns några filterkrav i where-satsen som hänvisar till den icke-yttre sammanfogade tabellen, har du (i många fall) upphävt din yttre sammanfogning. Så med din sql, verkar det som att den enklaste lösningen är att antingen använda rätt join eller flytta tabellnamnen på lämpligt sätt, och sedan flytta filtervillkoren från where-satsen och in i join-satsen.
SELECT f.faultcode, f.downloadtimeid, d.downloadtime, count(*) as faultcount
FROM download_time d
RIGHT OUTER JOIN fs_fault f ON
f.downloadtimeid = d.id
AND f.faultcode IN (1000,1100)
AND f.statusid IN(2, 4)
AND d.downloadtime BETWEEN '04/11/2011' AND '05/01/2012')
AND d.bunoid = 166501
GROUP BY d.bunoid, f.downloadtimeid, d.downloadtime, f.faultcode
Ett annat sätt som jag anser borde vara likvärdigt är
SELECT f.faultcode, f.downloadtimeid, d.downloadtime, count(*) as faultcount
FROM download_time d
RIGHT OUTER JOIN fs_fault f ON
f.downloadtimeid = d.id
AND d.downloadtime BETWEEN '04/11/2011' AND '05/01/2012')
AND d.bunoid = 166501
WHERE
f.faultcode IN (1000,1100)
AND f.statusid IN(2, 4)
GROUP BY d.bunoid, f.downloadtimeid, d.downloadtime, f.faultcode
Eftersom det inte spelar någon roll var filterkraven på fs_fault är. (och din SQL-motor kommer att ändra på det hela ändå).
Edit:Här är en SQLFiddle demonstrerar filtrering på join-satsen kontra where-satsen.