有一表T:
编号 年级 班级 考试标志 科目 姓名 分数
1   初一 1班  半期考试 语文 AA  89
2   初一 1班  半期考试 数学 AA  49
3   初一 1班  半期考试 英语 AA  89
4   初一 1班  期末考试 物理 AA  56
5   初一 1班  期末考试 语文 AA  89
6   初一 1班  期末考试 数学 AA  90
7   初一 1班  期末考试 英语 BB  24
8   初一 1班  半期考试 物理 BB  54
5   初一 2班  半期考试 语文 CC  89
6   初一 2班  半期考试 语文 CC  68

我要得到如下表:假如查询姓名=AA
年级 班级 考试标志 姓名 总分 班级名次
初一 1班  半期考试 AA  247  1 
初一 1班  期末考试 AA  235  1 

解决方案 »

  1.   

    是查所有姓名为AA的记录吗??
    select 年级,班级,考试标志,姓名,总分,班级名次 from T where 姓名=AA
      

  2.   


    --try SQL2005
    with 
    obj as
    (
        select [年级], [班级], [考试标志], [姓名], sum([分数]) as [总分]
        from T
        group by [年级], [班级], [考试标志], [姓名]
    )
    select *,
    [班级名次]=rank() over(partition by [年级],[班级],[考试标志] order by [总分] desc)
    from obj
      

  3.   

    select 年级,班级,考试标志,姓名,sum(分数) as 分数 from table where 姓名='AA' group by 年级,班级,考试标志,姓名
      

  4.   


    select 年级,班级,考试标志,姓名,sum(分数) as 总分, 
    班级名次=(select isnull(count(*),0)+1 from (select 姓名, sum(分数) as 总分
    from T where 年级=a.年级 and 班级=a.班级 and 考试标志=a.考试标志 group by 姓名) c where c.总分> a.总分 )from T a where 姓名='AA' group by 年级,班级,考试标志,姓名