日期:2014-05-19  浏览次数:20599 次

一个简单的分类排序问题
假如有这个表

姓名       月份         业绩  
张三         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语句应该怎么写

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

------解决方案--------------------
--創建測試環境
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 <