班级ID  姓名   分数  
2       张三   88     
4       李四   68  
3       张六   84    
4       张二   54   
2       张一   85  如上三个班级的学生成绩score,如何分别对三个班级排名,并在结果中显示三个班级内的排名情况呢?Select *,名次=(select count(分数) from score where 分数>x.分数 )+1 from score x 
我查询不出来

解决方案 »

  1.   

    Select *,名次=(select count(分数) from score where 班级ID = x.班级ID and 分数>x.分数 )+1 from score x 
      

  2.   

    Select *,名次=(select count(分数) from score where 分数>x.分数 group by nclassid)+1 from score x 我想要的结果是对班级内部排名 不是整体排名
      

  3.   

    DECLARE @TB TABLE(CID INT, NAME NVARCHAR(4), SC INT)
    INSERT @TB
    SELECT 2,  N'张三',  88 UNION ALL 
    SELECT 4,  N'李四',  68 UNION ALL 
    SELECT 3,  N'张六',  84 UNION ALL 
    SELECT 4,  N'张二',  54 UNION ALL 
    SELECT 2,  N'张一',  85SELECT *,PM=(SELECT COUNT(*) FROM @TB WHERE CID=A.CID AND SC<=A.SC)
    FROM @TB AS A
    ORDER BY CID,PM
    /*
    CID         NAME SC          PM          
    ----------- ---- ----------- ----------- 
    2           张一   85          1
    2           张三   88          2
    3           张六   84          1
    4           张二   54          1
    4           李四   68          2
    */
      

  4.   


    DECLARE @TB TABLE(CID INT, NAME NVARCHAR(4), SC INT)
    INSERT @TB
    SELECT 2,  N'张三',  88 UNION ALL 
    SELECT 4,  N'李四',  68 UNION ALL 
    SELECT 3,  N'张六',  84 UNION ALL 
    SELECT 4,  N'张二',  54 UNION ALL 
    SELECT 2,  N'张一',  85SELECT *,PM=(SELECT COUNT(*) FROM @TB WHERE CID=A.CID AND SC>=A.SC)
    FROM @TB AS A
    ORDER BY CID,PM
    /*
    CID         NAME SC          PM          
    ----------- ---- ----------- ----------- 
    2           张三   88          1
    2           张一   85          2
    3           张六   84          1
    4           李四   68          1
    4           张二   54          2
    */
      

  5.   

    create table #t1
    (
     班级ID int,
     姓名  nvarchar(20),
     分数 int  
    )
    insert into #t1
    select 
    2   ,   '张三' , 88 union all
    select    
    4   ,   '李四',  68 union all 
    select
    3   ,   '张六',  84    union all
    select
    4   ,  '张二' , 54  union all
    select
    2   ,   '张一',  85 
    select 班级ID,姓名,分数,ROW_NUMBER()over(partition by 班级ID order by 分数 desc) 排名 from #t1