日期:2014-05-18  浏览次数:20470 次

SQL分数段,高手帮忙。
SQL code

create table tbscore
    (
    schoolname varchar(20) ,
    stuname varchar(20),
    coursename varchar(10),
    score int,
    testname varchar(60),
    termname varchar(10)
)

insert into tbscore
select '金华四中','s1','数学',99,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华四中','s2','数学',98,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华四中','s3','数学',97,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华四中','s4','数学',96,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华四中','s5','数学',30,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华四中','s1','语文',99,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华四中','s2','语文',98,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华四中','s3','语文',97,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华四中','s4','语文',96,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华四中','s5','语文',32,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华五中','w1','数学',99,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华五中','w2','数学',98,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华五中','w3','数学',97,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华五中','w4','数学',96,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华五中','w5','数学',40,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华五中','w1','语文',99,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华五中','w2','语文',98,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华五中','w3','语文',97,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华五中','w4','语文',96,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
select '金华五中','w5','语文',42,'2009年6月份婺城区初一年级各学校摸底考试','初一'
--------------------------------------------------------
分数段     社会     语文    数学    科学     英语
0-29        0        0       0       0        0
30-39       0        1       1       0        0
40-49       0        1       1       0        0
50-59       0        0       0       0        0
60-69       0        0       0       0        0
70-79       0        0       0       0        0
80-89       0        0       0       0        0
90-99       0        8       8       0        0
100-109     0        0       0       0        0
110-119     0        0       0       0        0 
120-129     0        0       0       0        0
130-139               以下全是0
140-149
150-159
160-169
170-179
180-189
190-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 tbscore
union all
select 
  '[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 tbscore
union all
select 
  '[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
..