假如有这个表姓名   月份    业绩 
张三    1       10
张三    2        7
张三    3        4
李四    1        8
李四    2        0
李四    3        9
王五    1        1
王五    2        3
王五    3        5我要得到这么一个结果,即显示出个人的月业绩排名姓名   月份    业绩    月排名
张三    1       10       1
李四    1        8       2
王五    1        1       3
张三    2        7       1  
李四    2        0       3
王五    2        3       2 
张三    3        4       3
李四    3        9       1 
王五    3        5       2 SQL语句应该怎么写

解决方案 »

  1.   

    Select 
    *,
    (Select Count(姓名) From 表 Where 月份 = A.月份 And 业绩 >= A.业绩) As 月排名
    From
    表 A
      

  2.   

    select *,(select count(*) from 表 where 月份=a.月份 and 业绩>=a.业绩) as 月排名
    from 表 a
      

  3.   

    --創建測試環境
    Create Table 表
    (姓名 Nvarchar(10),
     月份 Int,
     业绩 Int)
    Insert 表 Select N'张三',    1,       10
    Union All Select N'张三',    2,        7
    Union All Select N'张三',    3,        4
    Union All Select N'李四',    1,        8
    Union All Select N'李四',    2,        0
    Union All Select N'李四',    3,        9
    Union All Select N'王五',    1,        1
    Union All Select N'王五',    2,        3
    Union All Select N'王五',    3,        5
    GO
    --測試
    Select 
    *,
    (Select Count(姓名) From 表 Where 月份 = A.月份 And 业绩 >= A.业绩) As 月排名
    From
    表 A
    Order By
    月份, 月排名
    GO
    --刪除測試環境
    Drop Table 表
    --結果
    /*
    姓名 月份 业绩 月排名
    张三 1 10 1
    李四 1 8 2
    王五 1 1 3
    张三 2 7 1
    王五 2 3 2
    李四 2 0 3
    李四 3 9 1
    王五 3 5 2
    张三 3 4 3
    */
      

  4.   

    DECLARE @T TABLE(姓名 VARCHAR(20),月份 INT,业绩 INT)
    INSERT @T
    SELECT '张三',1,10
    UNION ALL SELECT '张三',2,7
    UNION ALL SELECT'张三',3,4
    UNION ALL SELECT'李四',1,8
    UNION ALL SELECT'李四',2,0
    UNION ALL SELECT'李四',3,9
    UNION ALL SELECT'王五',1,1
    UNION ALL SELECT'王五',2,3
    UNION ALL SELECT'王五',3,5select *,(select count(*) from @T where 月份=a.月份 and 业绩>=a.业绩) as 月排名
    from @T a
    ORDER BY 月份