如何获得零值的结果

时间:2012-09-21 07:42:20

标签: sql sql-server-2008 tsql

我的查询是

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”

3 个答案:

答案 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