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

最后一个SQL 求一排序的SQL
建立表结构
create   table   a
(sname   int,         smonth   int,       score   int)             /*     分别是姓名,月份,分数*/
insert   into   a   values   (   1,7,80)
insert   into   a   values   (   1,8,40)
insert   into   a   values   (   1,9,80)
insert   into   a   values   (   2,7,50)
insert   into   a   values   (   2,8,40)
insert   into   a   values   (   2,9,60)
insert   into   a   values   (   3,7,50)
insert   into   a   values   (   3,8,80)
insert   into   a   values   (   3,9,60)
insert   into   a   values   (   4,7,50)
insert   into   a   values   (   4,8,40)
insert   into   a   values   (   4,9,90)

.............................

  对每人的季度总分排名     然后再排序   ,排名已经写出来了,但排序我写不出来  
,排名如下:
select   sname,
[七月]=sum(case   when   smonth=7   then   score   else   0   end),
[八月]=sum(case   when   smonth=8   then   score   else   0   end),
[九月]=sum(case   when   smonth=9   then   score   else   0   end),
[总分]=sum(score),
[排名]=(   select   count(*)+1   from(
select   col=1   from   a   where   smonth   in(7,8,9)   group   by   sname   having   sum(score)> sum(tmpA.score)
)   tmp
)
from   a   tmpA
where   smonth   in(7,8,9)
group   by   sname

大家先执行上面的两段     都没有错误   ~
会得到   以下东西
      它是按照sname   从上到下   1   ,2   ,3   ,4写出来的  
sname         七月           八月         九月               总分         排名
1 80 40 80 200 1
2 50 40 60 150 4
3 50 80 60 190 2
4 50 40 90 180 3


  现在有另外一个表     对应上面的   1   ,2,3   ,4排序关系(不是排名),
  id     sname      
    1         4      
    2         2
    3         3
    4         1
现在要求按照这个表的   ID   从上到下排(两个表sname是一样的   )    
也就是想得到  
sname         七月           八月         九月               总分         排名
4 50 40 90 180 3
2 50 40 60 150 4
3 50 80 60 190 2
1 80 40 80 200 1
 
求SQL     谢谢



------解决方案--------------------
--定义一个表变量
现在有另外一个表 对应上面的 1 ,2,3 ,4排序关系(不是排名),
id sname
1 4
2 2
3 3
4 1
declare table @t(id int,sname int)
insert into @t
select 1,4
union all
select 2,2
union all
select 3,3
union all
select 4,1
--再和你以上的语句相联
select b.sname,a.七月,a.八月,a.九月,a.总分,a.排名 from @t b inner join
(select sname,
[七月]=sum(case when smonth=7 then score else 0 en