insert into tscore
select '金华四中','s1','数学',99,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华四中','s2','数学',98,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华四中','s3','数学',96,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华四中','s4','数学',94,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华四中','s5','数学',99,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华四中','s1','语文',85,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华四中','s2','语文',87,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华四中','s3','语文',82,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华四中','s4','语文',75,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华四中','s5','语文',76,'2009年6月份婺城区初一年级各学校摸底考试','初一' unionselect '金华五中','w1','数学',57,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华五中','w2','数学',95,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华五中','w3','数学',94,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华五中','w4','数学',87,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华五中','w5','数学',98,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华五中','w1','语文',63,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华五中','w2','语文',88,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华五中','w3','语文',94,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华五中','w4','语文',87,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
select '金华五中','w5','语文',98,'2009年6月份婺城区初一年级各学校摸底考试','初一'
------------------下边是我想要的结果样式-------------
-----------------------------------------------------
学校名字  学校总人数  后20%所占人数    比率            所占人数总分平均分
金华四中      5            1        20%(1/5得到)            60
金华五中      5            1        20%(1/5得到)            70
-----------------------------------------------------
--以上结果完全是乱写的,就要这么个样子的表,大家帮帮忙。--我想得到这次考试所有学校总分后20%的学生的总人数,每个学校占了几个人。
--比如说俩个学校总共有100人,那后20%就是20人,这20人,每个学校占几个人。
--比率=该学校后20%所占人数/该学校总人数
--所占人数总分平均分=该学校后20%所占人数总分的平均分

解决方案 »

  1.   

    create table tscore
    (
    a varchar(20),
    b varchar(20),
    c varchar(20),
    d int,
    e varchar(40),
    f varchar(20)
    )
    insert into tscore
    select '金华四中','s1','数学',99,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
    select '金华四中','s2','数学',98,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华四中','s3','数学',96,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华四中','s4','数学',94,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华四中','s5','数学',99,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华四中','s1','语文',85,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
    select '金华四中','s2','语文',87,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华四中','s3','语文',82,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华四中','s4','语文',75,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华四中','s5','语文',76,'2009年6月份婺城区初一年级各学校摸底考试','初一'    unionselect '金华五中','w1','数学',57,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
    select '金华五中','w2','数学',95,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华五中','w3','数学',94,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华五中','w4','数学',87,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华五中','w5','数学',98,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华五中','w1','语文',63,'2009年6月份婺城区初一年级各学校摸底考试','初一' union
    select '金华五中','w2','语文',88,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华五中','w3','语文',94,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华五中','w4','语文',87,'2009年6月份婺城区初一年级各学校摸底考试','初一'    union
    select '金华五中','w5','语文',98,'2009年6月份婺城区初一年级各学校摸底考试','初一'select tb2.a,tb2.a1,tb3.a1,convert(float,tb3.a1)*100/tb2.a1 as a2 from 
    (
    select a,COUNT(*) as a1 
    from (select distinct a,b from tscore) tb
    group by a
    ) tb2 
    left join
    (
    select a,count(*) as a1
    from (select a,b from (select top 5 * from tscore order by d) tb group by a,b) tb
    group by a
    ) tb3 on tb2.a=tb3.a--结果
    a a1 a1 a2
    金华四中 5 3 60
    金华五中 5 1 20最后一列不知道你要什么
      

  2.   

    --结果
    a    a1    a1    a2
    金华四中    5    3    60
    金华五中    5    1    20
    结果好像有点问题,所有学校总人数的后20%人数只有2个人啊。因为一共只有10个人?
      

  3.   

    用下面这个就可以了,有点复杂
    select tb2.a,tb2.a1,tb3.a1,convert(float,tb3.a1)*100/tb2.a1 as a2,convert(numeric(5,2),tb4.d) as d from 
    (
    select a,COUNT(*) as a1 
    from (select distinct a,b from tscore) tb
    group by a
    ) tb2 
    left join
    (
    select a,count(*) as a1
    from (select a,b from (select top (select convert(int,0.2*COUNT(*)) from tscore) * from tscore order by d) tb group by a,b) tb
    group by a
    ) tb3 on tb2.a=tb3.a
    left join 
    (
    select a,avg(convert(float,d)) as d from (select top 5 * from tscore order by d) tb group by a
    ) tb4 on tb2.a=tb4.a