有一个单位工资库,要求统计出每个车间实发工资收入排在前20名的工人名单(不要干部),名单里有车间,姓名,实发工资(其中实发工资按从高到低排列,为每个车间收入最高的前20名)工资库如下表车间 职别 实发工资 姓名
一车间 干部 500 张三
二车间 工人 800 李四
二车间 工人 900 李军
二车间 干部 200 王军
一车间 工人 900 钱海
一车间 干部 500 张三
二车间 工人 800 李四
二车间 工人 900 李军
二车间 干部 200 王军
一车间 工人 900 钱海
FROM 工资库 t1
WHERE
(SELECT COUNT(*)
FROM 工资库 t2
WHERE t2.车间=t1.车间
AND t2.实发工资>t1.实发工资)<=20
AND 职别<>'干部'
create table #temp
(A varchar(50),
B varchar(50),
C varchar(50),
D varchar(50)
)
insert into #temp
select '一车间','干部','500','张三' union all select '二车间','工人','800','李四' union all select '二车间','工人','900','李军' union all select '二车间','干部','200','王军' union all select '一车间','工人','900','钱海'
select * from #tempselect top 20 B,D,A,C from #temp where B<>'干部' order by A DESC,C DESC-------
工人 钱海 一车间 900
工人 李军 二车间 900
工人 李四 二车间 800
SELECT A,B,C,D
FROM #temp t1
WHERE
(SELECT COUNT(*)
FROM #temp t2
WHERE t2.A=t1.A
AND t2.C>t1.C)<=20
AND B<>'干部'order by A DESC,C DESC
FROM 工资库 t1
WHERE 职别<>'干部'
order by 实发工资 desc
FROM 工资库 t1
WHERE 职别<>'干部'
order by 实发工资 desc这样就得出了前20名的工资