首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

问一个关于rank排序的有关问题

2013-09-12 
问一个关于rank排序的问题薪资表T(id,date,salary)我用rank()给7月份的薪资排序,再给8月份的薪资排序,然后

问一个关于rank排序的问题
薪资表T(id,date,salary)
我用rank()给7月份的薪资排序,再给8月份的薪资排序,然后我想知道这2个月里排序变动最大的前5名,
降低幅度最大的前5名,升高幅度最大的前5名。
[解决办法]



SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[testtb](
[fEmployee] [nvarchar](50) NULL,
[fSalery] [numeric](18, 2) NULL,
[fDate] [date] NULL
) ON [PRIMARY]

GO



INSERT INTO testtb
SELECT '张三',12452,GETDATE()
UNION
SELECT '历史',5262,GETDATE()
UNION
SELECT '咖啡机',23511,GETDATE()
UNION
SELECT '大锅饭',5231,GETDATE()
UNION
SELECT '张三',63263,DATEADD(MONTH,-1,GETDATE())
UNION
SELECT '历史',2363,DATEADD(MONTH,-1,GETDATE())
UNION
SELECT '咖啡机',1552,DATEADD(MONTH,-1,GETDATE())
UNION
SELECT '大锅饭',43733,DATEADD(MONTH,-1,GETDATE())
UNION
SELECT '说的',26363,GETDATE()
UNION
SELECT '第三方',562,GETDATE()
UNION
SELECT '阿什顿',211,GETDATE()
UNION
SELECT '单身档',5131,GETDATE()
UNION
SELECT '说的',263,DATEADD(MONTH,-1,GETDATE())
UNION
SELECT '第三方',23163,DATEADD(MONTH,-1,GETDATE())
UNION
SELECT '阿什顿',15652,DATEADD(MONTH,-1,GETDATE())
UNION
SELECT '单身档',433,DATEADD(MONTH,-1,GETDATE())





SELECT TOP 5 a.fEmployee,
SUM(CASE a.fDate WHEN CONVERT(DATE,DATEADD(MONTH,-1,GETDATE())) 
then  a.fSalery ELSE 0 END)
八月薪水,
SUM(CASE a.fDate WHEN CONVERT(DATE,GETDATE()) 
then  a.fSalery ELSE 0 END)
九月薪水
,SUM(CASE a.fDate WHEN CONVERT(DATE,DATEADD(MONTH,-1,GETDATE())) 
then  a.排名 ELSE 0 END) 八月排名,
SUM(CASE a.fDate WHEN CONVERT(DATE,GETDATE()) 
then  a.排名 ELSE 0 END) 九月排名,
SUM(CASE a.fDate WHEN CONVERT(DATE,DATEADD(MONTH,-1,GETDATE())) 
then  a.排名 ELSE 0 END)-SUM(CASE a.fDate WHEN CONVERT(DATE,GETDATE()) 
then  a.排名 ELSE 0 END) 排名变动
FROM 
(
SELECT a.fEmployee,a.fDate,a.fSalery
,rank() over(partition by a.fDate order by a.fSalery desc) 排名


FROM testtb a
) a
GROUP BY a.fEmployee
ORDER BY SUM(CASE a.fDate WHEN CONVERT(DATE,DATEADD(MONTH,-1,GETDATE())) 
then  a.排名 ELSE 0 END)-SUM(CASE a.fDate WHEN CONVERT(DATE,GETDATE()) 
then  a.排名 ELSE 0 END) DESC 

热点排行