有一个单位工资库,要求统计出每个车间实发工资收入排在前20名的工人名单(不要干部),名单里有车间,姓名,实发工资(其中实发工资按从高到低排列,为每个车间收入最高的前20名)工资库如下表车间  职别  实发工资  姓名
一车间 干部  500   张三
二车间 工人  800   李四
二车间 工人  900   李军
二车间 干部  200   王军
一车间 工人  900   钱海

解决方案 »

  1.   

    SELECT 车间,职别,实发工资,姓名
    FROM 工资库 t1
    WHERE 
    (SELECT COUNT(*) 
    FROM 工资库 t2 
    WHERE t2.车间=t1.车间
    AND t2.实发工资>t1.实发工资)<=20
    AND 职别<>'干部'
      

  2.   

    这样可以么
    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
      

  3.   

    臭虫正解~
    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
      

  4.   

    SELECT top 10 车间,职别,实发工资,姓名
    FROM 工资库 t1
    WHERE  职别<>'干部'
    order by 实发工资 desc
      

  5.   

    SELECT top 20 车间,职别,实发工资,姓名
    FROM 工资库 t1
    WHERE  职别<>'干部'
    order by 实发工资 desc这样就得出了前20名的工资