I have a query, in this query I need to get a number of classes (class count) in each district. In here it comes only those who have classes. So I need to show the district’s it doesn’t have a classes as well.
My District table consist 25 values. and my class coverage table has 5 values to 3 districts. I need to show all the districts.
Code
SELECT
CC.DistrictId, D.DistrictName,
COUNT(D.DistrictId) AS DistrictCount
FROM
TBL_T_ClassCoverage CC
LEFT JOIN
[dbo].[TBL_M_District] D ON CC.DistrictId = D.DistrictId
WHERE
CC.IsActive = 1
GROUP BY
CC.DistrictId, D.DistrictName
ORDER BY
DistrictId ASC
Advertisement
Answer
You need to join your tables the other way, from districts to classes, to ensure that all district values are in the output:
SELECT D.DistrictId, D.DistrictName, COUNT(CC.DistrictId) AS DistrictCount FROM [dbo].[TBL_M_District] D LEFT JOIN TBL_T_ClassCoverage CC ON CC.DistrictId = D.DistrictId AND CC.IsActive = 1 GROUP BY D.DistrictId, D.DistrictName ORDER BY D.DistrictId ASC
