id  name grade
  1   2     80
  2   2     90
  3   3     80
  4   4     88一条Select语句打印如下信息:
  id  name grade rank(排名)
  1   2     80    3
  2   2     90    1
  3   3     80    3
  4   4     88    2 

解决方案 »

  1.   

    --sql2005
    select *,DENSE_RANK() over( order by grade) from tb
    --sql 2000
    select *,排名=(select count(distict grade) from tb where grade>=a.grade)
    from tb a
      

  2.   


    declare @t table (id int,name int,grade int)
    insert into @t
    select 1,2,80 union all
    select 2,2,90 union all
    select 3,3,80 union all
    select 4,4,88select *,dense_rank() over (order by grade desc) as rank from @t
    /*
    id          name        grade       rank
    ----------- ----------- ----------- --------------------
    2           2           90          1
    4           4           88          2
    1           2           80          3
    3           3           80          3
    */
      

  3.   

      create table tb (id int,name int,grade int)
      insert into tb
      select 1,2,80 union
      select 2,2,90 union
      select 3,3,80 union
      select 4,4,88
      
      --sql2005
    select *,DENSE_RANK() over( order by grade desc) from tb
    --sql 2000
    select *,排名=(select count(distinct grade) from tb where grade>=a.grade)
    from tb a
    id          name        grade       
    ----------- ----------- ----------- --------------------
    2           2           90          1
    4           4           88          2
    1           2           80          3
    3           3           80          3(4 行受影响)id          name        grade       排名
    ----------- ----------- ----------- -----------
    1           2           80          3
    2           2           90          1
    3           3           80          3
    4           4           88          2(4 行受影响)
      

  4.   

    IF EXISTS(SELECT COUNT(1) FROM sys.objects WHERE name = 'TEST_a' AND type = 'U')
    DROP TABLE TEST_a
    GO
    CREATE TABLE TEST_a
    (
    A NVARCHAR(50) NULL,
    B NVARCHAR(50) NULL,
    C NVARCHAR(50) NULL
    )INSERT TEST_a
    SELECT 1,2,80
    UNION ALL
    SELECT 2,2,90
    UNION ALL
    SELECT 3,3,80
    UNION ALL
    SELECT 4,4,88SELECT A,B,C,ROW_NUMBER()OVER (ORDER BY C DESC) AS '排名'  FROM TEST_a
    ORDER BY ADROP TABLE TEST_a
    供参考,并列的没算出来
      

  5.   


    select *,RANK() over( order by grade desc) from tb order by id
      

  6.   

    declare @t table (id int,name int,grade int)
    insert into @t
    select 1,2,80 union all
    select 2,2,90 union all
    select 3,3,80 union all
    select 4,4,88select *,dense_rank() over (order by grade desc) as rank 
    from @t
    order by id