TSQL erstellt eine durchschnittliche Anzahl für Wochen über mehrere Jahre

Ich muss eine durchschnittliche Anzahl pro Woche über mehrere Jahre erstellen. Zum Beispiel wenn ich:

select w.weekno, isNULL(AVG(quantity),0) as 'mcount' from weeks w left join sampledates sd ON w.weekNo = datepart(wk,sd.sampledate) inner join sampledate_species_location ssdl ON sd.sampledateid = ssdl.sampledateid inner join locations l ON ssdl.locationid = l.locationid inner join species s ON ssdl.speciesid = s.speciesid where year(sd.sampledate) = datepart(yy,getDate()) and l.locationid = 8 and l.generalarea = 'Western' group by w.weekno order by w.weekno 

Was ich für meine Ergebnisse brauche, würde so aussehen:

 WEEK MCOUNT 17 0 18 6 19 7 20 8 21 9 22 5 23 0 24 8 

Ich schuf einen Tisch namens Wochen mit Wochen 17-41 in ihm als die WocheNoch zu hoffen, dass links Beitritt zu den Ergebnissen würde die Woche Zahlen, wo ich keine Menge haben, aber das funktioniert nicht. Ich muss auch die gleiche Abfrage machen, aber für alle vorherigen Jahre, die ich nicht sicher bin, wie ich mehrere Jahre bezahlen würde, von Woche in diesem Format.

Das Problem ist deine where Klausel und die inner join s. Sie müssen die left outer join für alle Tabellen fortsetzen. Dann, where Bedingungen in der on Klausel sein müssen (sonst werden die left joins in inner join verwandelt):

 select w.weekno, isNULL(AVG(quantity),0) as 'mcount' from weeks w left join sampledates sd ON w.weekNo = datepart(wk, sd.sampledate) and year(sd.sampledate) = datepart(yy, getDate()) left join sampledate_species_location ssdl ON sd.sampledateid = ssdl.sampledateid left join locations l ON ssdl.locationid = l.locationid and l.locationid = 8 and l.generalarea = 'Western' left join species s ON ssdl.speciesid = s.speciesid group by w.weekno order by w.weekno;