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

一个关于分组后取前几条的sql语句?多谢!找了很好贴子,看不明白,特请问

2012-01-22 
一个关于分组后取前几条的sql语句?谢谢!找了很好贴子,看不明白,特请教!一个表employee字段有(部门,姓名,次

一个关于分组后取前几条的sql语句?谢谢!找了很好贴子,看不明白,特请教!
一个表employee   字段有(部门,姓名,次数)     Dept_name     empl_name     cs
现在问题是如何写SQL取得每个部门次数前3位的姓名及次数?

Dept_name     empl_name     cs
A                     T1                     11
A                     T2                     2    
A                     T3                     3
A                     T4                     4      
B                     W1                     1
B                     W2                     2
B                     W3                     3
B                     W4                     4  
C                     Q2                     23
C                     Q3                     31
C                     Q4                     45    

如何得到如下结果?
Dept_name     empl_name     cs
A                     T1                     11
A                     T4                     4  
A                     T3                     3
B                     W4                     4  
B                     W3                     3
B                     W2                     2
C                     Q4                     45  
C                     Q3                     31
C                     Q2                     23

谢谢!


[解决办法]
用临时表吧!
--try
select * into #temp from tablename
alter tabel #temp add id int identity(1,1)



select * from #temp a where id in (select top 3 id from #temp where Dept_name=a.Dept_name order by cs )
[解决办法]
--方法一:
Select * From employee A
Where (Select Count(*) From employee Where Dept_name= A.Dept_name And cs> A.cs) < 3
Order By Dept_name, cs

--方法二:
Select * From employee A
Where Exists (Select Count(*) From employee Where Dept_name= A.Dept_name And cs> A.cs Having Count(*) < 3)
Order By Dept_name, cs

--方法三:
Select * From employee A
Where AddDate In (Select TOP 3 cs From employee Where Dept_name= A.Dept_name Order By cs Desc)
Order By Dept_name , cs

[解决办法]
'脑子 '附有有语法错误
强;学习;
[解决办法]
上边的方法都对的 ,我就不多说了
[解决办法]
Select * From employee A
Where (Select Count(*) From employee Where Dept_name= A.Dept_name And cs < A.cs) < 3

热点排行