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

关于分组查询的sql语句求解
我的表及数据如下:
id         mc           zw
1           张三       科长
2           张三       科长
3           张三       科长
4           张三       科长
5           张三       科长
6           张三       科长
7           张三       科长
8           张三       科长
9           李四       科员
10         李四       科员
11         李四       科员
12         明明       科员
13         明明       科员
14         明明       科员
15         明明       科员
16         明明       科员
17         明明       科员
18         红红       副科长

其中有8行数据是张三,6行数据是明明,3行数据是李四,1行数据是红红
请问如何找到有最多行数的前两位,就是张三以及明明的所有数据。要求最后结果如下:
id         mc           zw
1           张三       科长
2           张三       科长
3           张三       科长
4           张三       科长
5           张三       科长
6           张三       科长
7           张三       科长
8           张三       科长
12         明明       科员
13         明明       科员
14         明明       科员
15         明明       科员
16         明明       科员
17         明明       科员

------解决方案--------------------
不对
select * from [Table] where mc in
(select mc from
(select top 2 mc,count(1) from [Table] group by mc order by count(1) desc) a
)
------解决方案--------------------
set nocount on
declare @a table(id int,F1 varchar(10), F2 varchar(10))
insert @a select 1 , '张三 ', ' 科长 '
union all select 2 , '张三 ', '科长 '
union all select 3 , '张三 ', '科长 '
union all select 4 , '张三 ', '科长 '
union all select 5 , '张三 ', '科长 '
union all select 6 , '张三 ', '科长 '
union all select 7 , '张三 ', '科长 '
union all select 8 , '张三 ', '科长 '
union all select 9 , '李四 ', '科员 '
union all select 10 , '李四 ', '科员 '
union all select 11 , '李四 ', '科员 '
union all select 12 , '明明 ', '科员 '
union all select 13 , '明明 ', '科员 '
union all select 14 , '明明 ', '科员 '
union all select 15 , '明明 ', '科员 '
union all select 16 , '明明 ', '科员 '
union all selec