我的查询是
select m.year_id,Count(*) as Distinctions from NewTestDB.dbo.[Master_MARKS2005] as m
join NewTestDB.dbo.Master_Student as s
on s.Student_id=m.Student_Id
join NewTestDB.dbo.Master_School as sc
on sc.school_id=s.school_code
where sc.SCHOOL_CODE= 'an0001' and m.YEAR_ID between 1 and 8 and m.[NRC_CLASS]='D'
group by m.year_id,
我希望所有year_id在1到8之间,但现在我只能在m。[NRC_CLASS] ='D' 如何重写此查询,以便当m.NRC_CLASS列中没有行包含“D”值时,我可以将其计为“0”
答案 0 :(得分:1)
你应该使用Left Join来实现这个
就像你可以试试这个
SELECT m.year_id,COUNT(*) AS Distinctions
FROM NewTestDB.dbo.[Master_MARKS2005] AS m
LEFT JOIN
NewTestDB.dbo.Master_Student AS s
ON
s.Student_id=m.Student_Id
JOIN
NewTestDB.dbo.Master_School AS sc
ON
sc.school_id=s.school_code
WHERE
sc.SCHOOL_CODE= 'an0001'
AND
m.YEAR_ID BETWEEN 1 AND 8
AND
m.[NRC_CLASS]='D'
GROUP BY m.year_id,
答案 1 :(得分:1)
试试这个:
select m.year_id,
Count(CASE WHEN m.[NRC_CLASS]='D' THEN 1 ELSE 0 END) as Distinctions
from NewTestDB.dbo.[Master_MARKS2005] as m
join NewTestDB.dbo.Master_Student as s
on s.Student_id=m.Student_Id
join NewTestDB.dbo.Master_School as sc
on sc.school_id=s.school_code
where sc.SCHOOL_CODE= 'an0001' and m.YEAR_ID between 1 and 8
group by m.year_id,
答案 2 :(得分:1)
select isnull(m.year_id,''),Count(*) as Distinctions from NewTestDB.dbo.[Master_MARKS2005] as m
left join NewTestDB.dbo.Master_Student as s
on s.Student_id=m.Student_Id
left join NewTestDB.dbo.Master_School as sc
on sc.school_id=s.school_code
where sc.SCHOOL_CODE= 'an0001' and m.YEAR_ID between 1 and 8 and m.[NRC_CLASS]='D'
group by m.year_id