现在有表结构如下,考号 学校名   学生姓名    语文成绩   数学成绩然后我统计了一下平均分和及格率:
select 学校 ,count(*) as 人数,
convert(decimal(18,2),avg(语文)) as 语文平均分,
ltrim(convert(decimal(18,2),sum(case when 语文>=72 then 1 else 0 end)*100.0/count(*)))+'%' as 语文及格率,
ltrim(convert(decimal(18,2),sum(case when 语文>=96 then 1 else 0 end)*100.0/count(*)))+'%' as 语文优秀率,
convert(decimal(18,2),avg(数学)) as 数学平均分, 
ltrim(convert(decimal(18,2),sum(case when 数学>=72 then 1 else 0 end)*100.0/count(*)))+'%' as 数学及格率,
ltrim(convert(decimal(18,2),sum(case when 数学>=96 then 1 else 0 end)*100.0/count(*)))+'%' as 数学优秀率
from school
group by 学校 ;
但是问题出现了,我如何让结果按照考号从小到大的顺序排列呢?请各位指点,谢谢。

解决方案 »

  1.   

    考号   学校
    1     A
    2     A
    3     B
    4     A
    5     B现在你的统计变成
    学校    人数. ....
    A       3
    B       2还怎么按考号排号?
      

  2.   

    你这样统计出来的可以按学校,人数或者其中某个课程的及格率去排序,但按照考号估计不行!要么你再加个max(考号),排序的时候也用 max(考号)
      

  3.   

    order by left(max(考号),2)???
      

  4.   


    select 学校 ,count(*) as 人数,
    convert(decimal(18,2),avg(语文)) as 语文平均分,
    ltrim(convert(decimal(18,2),sum(case when 语文>=72 then 1 else 0 end)*100.0/count(*)))+'%' as 语文及格率,
    ltrim(convert(decimal(18,2),sum(case when 语文>=96 then 1 else 0 end)*100.0/count(*)))+'%' as 语文优秀率,
    convert(decimal(18,2),avg(数学)) as 数学平均分, 
    ltrim(convert(decimal(18,2),sum(case when 数学>=72 then 1 else 0 end)*100.0/count(*)))+'%' as 数学及格率,
    ltrim(convert(decimal(18,2),sum(case when 数学>=96 then 1 else 0 end)*100.0/count(*)))+'%' as 数学优秀率
    from school
    group by 学校,left(考号,2)
    order by left(考号,2)