表 M
ID   名  次数
1    A   1
2    B   3
3    C   2
希望按次数大小对A,B,C进行排名,结果如下
名    排名
A     3
B     1
C     2
如何实现?~~~~`

解决方案 »

  1.   

    SELECT 名 , 次数=(SELECT COUNT(DISTINCT 次数) FROM m WHERE 次数 <= m.次数) FROM m
      

  2.   

    create table m(ID int,名 varchar(10), 次数 int)
    insert into m values(1,    'A',   1)
    insert into m values(2,    'B',   3)
    insert into m values(3,    'C',   2)
    SELECT 名,排名=(SELECT COUNT(DISTINCT 次数) FROM m WHERE 次数 >= a.次数) FROM m a
    drop table m/*
    名          排名          
    ---------- ----------- 
    A          3
    B          1
    C          2(所影响的行数为 3 行)
    */
      

  3.   

    create table m(ID int,名 varchar(10), 次数 int)
    insert into m values(1,    'A',   1)
    insert into m values(2,    'B',   3)
    insert into m values(3,    'C',   2)
    insert into m values(4,    'D',   5)
    insert into m values(5,    'C',   2)要是都是这些数据呢?
    怎么排名?
      

  4.   

    自己仿照乌龟大哥的写出来了。。
    select distinct 名,排名=(select count(distinct 次数)[次数] from (SELECT id,名,sum(次数)[次数] FROM m group by 名,id) a where a.次数>=b.次数) 
    from m b但对于乌龟大哥这里的SELECT COUNT(DISTINCT 次数) FROM m WHERE 次数 >= a.次数并不是太了解。可以讲讲思路么??
      

  5.   


    select 名,排名=(select count(distinct 次数) from #m where 次数>=a.次数) from #m a order by 排名
    结果
    __________
    名          排名          
    ---------- ----------- 
    D          1
    B          2
    C          3
    E          3
    A          4_________________select 名,排名=(select count(*) from #m where 次数>=a.次数) from #m a order by 排名结果
    ______________
    名          排名          
    ---------- ----------- 
    D          1
    B          2
    C          4
    E          4
    A          5
      

  6.   

    Update 成绩表 
    Set a.名次 = ( 
    Select Count(*) + 1 
    From 成绩表 b 
    Where a.总成绩 < b.总成绩 

    From 成绩表 a
      

  7.   

    select 名,排名=(select distinct(次数) from m where 次数>=a.次数) from m a