2012-09-21 141 views
1

我的查詢是零怎樣才能得到結果值

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, 

我想從1之間的所有year_id對8,但現在我只得到當m。[NRC_CLASS] =「d」 如何改寫此查詢,這樣我可以當m.NRC_CLASS列中沒有行包含「d」值獲取計數爲0

+0

是'組由m.year_id,',並在最後錯字逗號還是有您用於分組的另一列? –

+0

我瞭解它的一個愚蠢的問題,但我沒有在那一刻。感謝你們所有的幫助我 – Pavi

回答

1

你應該使用左連接來實現這個

就像你可以試試這個

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, 
+0

非常感謝你,真的很抱歉花時間做簡單的事情。 – Pavi

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, 
+0

謝謝,你的代碼幫了我很多 – Pavi

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 
+0

謝謝先生.. – Pavi