需求如下:create table AA
(
   id int, --排名
   point int, --得分
   name varchar(50) --姓名
)
表数据如下:
 1        100        张三
 2        80         李四
 3        80         王五
 4        75         杨六
 5        75         方七现在想按照运动会那样排序,得到这样的结果
 1        100        张三
 2        80         李四
 2        80         王五
 4        75         杨六
 4        75         方七请问这sql怎么写,AA表中的数据也是通过查询得来的
请大家帮帮忙,谢谢

解决方案 »

  1.   

    --2005
    select 
    排名=RANK() over (order by point desc )
    ,point,name 
    from AA
      

  2.   

    SELECT id=(SELECT DISTINCT(point)FROM AA WEHRE point>T.point ),
           point,
           name
    FROM AA T
      

  3.   


    --> 测试数据:[TB]
    if object_id('[TB]') is not null drop table [TB]
    create table [TB]([id] int,[point] int,[name] varchar(4))
    insert [TB]
    select 1,100,'张三' union all
    select 2,80,'李四' union all
    select 3,80,'王五' union all
    select 4,75,'杨六' union all
    select 5,75,'方七'select id=(select count([point])+1 from TB where T.[point]<[point]),point,name
    from TB t/*
    id          point       name
    ----------- ----------- ----
    1           100         张三
    2           80          李四
    2           80          王五
    4           75          杨六
    4           75          方七(5 行受影响)
    */drop table TB
      

  4.   

    SELECT A.* FROM A
    JOIN (SELECT POINT,MIN(ID) FROM TB GROUP BY POINT) AS T
    ON A.ID=T.ID AND A.POINT=T.POINT
      

  5.   

    -- =========================================
    -- -----------t_mac 小编-------------------
       --------------------希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('aa') IS NOT NULL
    DROP TABLE aa
    GO
    CREATE TABLE aa(ID  int, POINT int , NAME varchar(10))
    go
    insert aa SELECT 
    1    ,    100,        '张三' UNION ALL SELECT 
    2    ,    80,        '李四' UNION ALL SELECT 
    3    ,    80,       '王五' UNION ALL SELECT 
    4    ,    75,        '杨六' UNION ALL SELECT 
    5     ,   75,       '方七' 
    GO
    select 
    排名=RANK() over (order by point desc )
    ,point,name 
    from aago
    排名                   point       name
    -------------------- ----------- ----------
    1                    100         张三
    2                    80          李四
    2                    80          王五
    4                    75          杨六
    4                    75          方七
      

  6.   


    IF OBJECT_ID('AA') IS NOT NULL DROP TABLE AA
    create table AA
    (
      id int, --排名
      point int, --得分
      name varchar(50) --姓名

    INSERT INTO AA
    SELECT 1,        100,        '张三' UNION ALL
    SELECT 2,        80,        '李四' UNION ALL
    SELECT 3,        80,        '王五' UNION ALL
    SELECT 4,        75,        '杨六' UNION ALL
    SELECT 5,        75,        '方七' 
    SELECT ID
    ,(SELECT COUNT(DISTINCT POINT)+1 FROM AA T2 WHERE T2.POINT>AA.POINT) '名次'
    ,POINT,[NAME] 
    FROM AA
    /*
    ID 名次 POINT NAME
    1 1 100 张三
    2 2 80 李四
    3 2 80 王五
    4 3 75 杨六
    5 3 75 方七
    */
      

  7.   

    select id=(select count([point])+1 from aa where a.[point]<[point]),point,name
    from aa a
      

  8.   

    -- =========================================
    -- -----------t_mac 小编-------------------
       --------------------希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('aa') IS NOT NULL
    DROP TABLE aa
    GO
    CREATE TABLE aa(ID  int, POINT int , NAME varchar(10))
    go
    insert aa SELECT 
    1    ,    100,        '张三' UNION ALL SELECT 
    2    ,    80,        '李四' UNION ALL SELECT 
    3    ,    80,       '王五' UNION ALL SELECT 
    4    ,    75,        '杨六' UNION ALL SELECT 
    5     ,   75,       '方七' 
    GO
    select 
    排名=(select count(point)+1 from aa where k.point<point)
    ,point,name 
    from aa kgo
    排名                   point       name
    -------------------- ----------- ----------
    1                    100         张三
    2                    80          李四
    2                    80          王五
    4                    75          杨六
    4                    75          方七
      

  9.   

    --> 测试数据:[TB]
    if object_id('[TB]') is not null drop table [TB]
    create table [TB]([id] int,[point] int,[name] Nvarchar(4))
    insert [TB]
    select 1,100,N'张三' union all
    select 2,80,N'李四' union all
    select 3,80,N'王五' union all
    select 4,75,N'杨六' union all
    select 5,75,N'方七'select id=(select count(distinct point) from TB where T.[point]<=[point]),
           point,
           [name]
    from TB t
    /*
    id          point       name
    ----------- ----------- ----
    1           100         张三
    2           80          李四
    2           80          王五
    3           75          杨六
    3           75          方七(5 個資料列受到影響)
    */
      

  10.   

    if object_id('[TB]') is not null drop table [TB]
    create table [TB]([id] int,[point] int,[name] varchar(4))
    insert [TB]
    select 1,100,'张三' union all
    select 2,80,'李四' union all
    select 3,80,'王五' union all
    select 4,75,'杨六' union all
    select 5,75,'方七'SELECT ISNULL(T.ID,T.ID)ID,A.POINT,A.NAME FROM TB A
    LEFT JOIN (SELECT POINT,MIN(ID)ID FROM TB GROUP BY POINT) AS T
    ON  A.POINT=T.POINT
    (所影响的行数为 5 行)ID          POINT       NAME 
    ----------- ----------- ---- 
    1           100         张三
    2           80          李四
    2           80          王五
    4           75          杨六
    4           75          方七(所影响的行数为 5 行)
      

  11.   

    select id=(select count([point])+1 from TB where T.[point]<[point]),point,name
    from TB t