- SQL code
create table tbscore ( schoolname varchar(20) , stuname varchar(20), coursename varchar(10), score int, testname varchar(60), termname varchar(10))insert into tbscoreselect '金华四中','s1','数学',99,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华四中','s2','数学',98,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华四中','s3','数学',97,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华四中','s4','数学',96,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华四中','s5','数学',30,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华四中','s1','语文',99,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华四中','s2','语文',98,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华四中','s3','语文',97,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华四中','s4','语文',96,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华四中','s5','语文',32,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华五中','w1','数学',99,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华五中','w2','数学',98,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华五中','w3','数学',97,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华五中','w4','数学',96,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华五中','w5','数学',40,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华五中','w1','语文',99,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华五中','w2','语文',98,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华五中','w3','语文',97,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华五中','w4','语文',96,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华五中','w5','语文',42,'2009年6月份婺城区初一年级各学校摸底考试','初一'--------------------------------------------------------分数段 社会 语文 数学 科学 英语0-29 0 0 0 0 030-39 0 1 1 0 040-49 0 1 1 0 050-59 0 0 0 0 060-69 0 0 0 0 070-79 0 0 0 0 080-89 0 0 0 0 090-99 0 8 8 0 0100-109 0 0 0 0 0110-119 0 0 0 0 0 120-129 0 0 0 0 0130-139 以下全是0140-149150-159160-169170-179180-189190-200合计 0 10 10 0 0------------------------- ↑ 笔算正确结果 每个分数段都是算所有学校的学生加在一起,高手帮忙。
------解决方案--------------------
- SQL code
--中间部分自己补上select '[0-29]'分数段, sum(case when coursename=N'社会' and score between 0 and 29 then 1 else 0 end)社会, sum(case when coursename=N'语文' and score between 0 and 29 then 1 else 0 end)语文, sum(case when coursename=N'科学' and score between 0 and 29 then 1 else 0 end)科学, sum(case when coursename=N'数学' and score between 0 and 29 then 1 else 0 end)数学, sum(case when coursename=N'英语' and score between 0 and 29 then 1 else 0 end)英语from tbscoreunion allselect '[30-39]'分数段, sum(case when coursename=N'社会' and score between 30 and 39 then 1 else 0 end)社会, sum(case when coursename=N'语文' and score between 30 and 39 then 1 else 0 end)语文, sum(case when coursename=N'科学' and score between 30 and 39 then 1 else 0 end)科学, sum(case when coursename=N'数学' and score between 30 and 39 then 1 else 0 end)数学, sum(case when coursename=N'英语' and score between 30 and 39 then 1 else 0 end)英语from tbscoreunion allselect '[40-49]'分数段, sum(case when coursename=N'社会' and score between 40 and 49 then 1 else 0 end)社会, sum(case when coursename=N'语文' and score between 40 and 49 then 1 else 0 end)语文, sum(case when coursename=N'科学' and score between 40 and 49 then 1 else 0 end)科学, sum(case when coursename=N'数学' and score between 40 and 49 then 1 else 0 end)数学, sum(case when coursename=N'英语' and score between 40 and 49 then 1 else 0 end)英语from tbscore.........union allselect '[合计]'分数段, sum(case when coursename=N'社会' then 1 else 0 end)社会, sum(case when coursename=N'语文' then 1 else 0 end)语文, sum(case when coursename=N'科学' then 1 else 0 end)科学, sum(case when coursename=N'数学' then 1 else 0 end)数学, sum(case when coursename=N'英语' then 1 else 0 end)英语from tbscore