怎样在Select 语句的每个分组中取前几位的记录?

XRS 2003-05-12 07:26:41
例如:
select 地区,种类,sum(数量) from table1 group by 地区,种类 order by 种类, 数量 desc
结果如下:
地区 种类 销售数量
gz aa 100
sh aa 80
bj aa 60
. . .
. . .
sh cc 120
bh cc 70
gz cc 55
. . .
现在需要的结果是按种类的每个分组中取前2位,应该怎样写?
...全文
45 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
joygxd 2003-05-12
select aa.地区,aa.种类,aa.sum(数量)
from table1 aa,(select top 2 * from table1 where 种类=aa.种类 group by 种类,数量 order by 种类, 数量) bb
where aa.地区=bb.地区 and aa.种类=bb.种类
group by aa.地区,aa.种类 order by aa.种类, aa.数量 desc
回复
joygxd 2003-05-12
select aa.地区,aa.种类,aa.sum(数量)
from table1 aa,(select top 2 * from table1 group by 数量,种类 order by 种类, 数量) bb
where aa.地区=bb.地区 and aa.种类=bb.种类
group by aa.地区,aa.种类 order by aa.种类, aa.数量 desc
回复
triout 2003-05-12
select a.地区,a.种类,sum(a.销售数量) from 你的表名 a Inner Join
(select Top 2 地区,种类,销售数量 from 你的表名 order by 销售数量 asc) b
On (a.地区=b.地区 AND a.种类=b.种类) Group By a.种类,a.地区
回复
pengdali 2003-05-12
select 地区,种类,sum(数量) 销售数量 from table1 as tem
group by 地区,种类 having sum(数量) in (select top 2 sum(数量) from table1

group by 地区,种类 having 地区=tem.地区 and 种类=tem.种类 order by 种类, 数量 desc)

order by 种类, 数量 desc
回复
pengdali 2003-05-12
select select top 2 地区,种类,sum(数量) 销售数量 from table1 as tem
group by 地区,种类 having sum(数量) in (select sum(数量) from table1 group by 地区,种类 having 地区=tem.地区 and 种类=tem.种类 order by 种类, 数量 desc) order by 种类, 数量 desc
回复
select * from
(select 地区,种类,sum(数量) 销售数量 from table1 group by 地区,种类) as A
where 地区+cast(销售数量 as varchar) in
(select top 2 地区+cast(sum(数量) as varchar) from table1 where 种类 = A.种类 group by 地区 order by 数量 desc)
order by 种类, 数量 desc
回复
XRS 2003-05-12
都还是不行。。以上几种方法大都提示:
列 'table1.数量' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-05-12 07:26
社区公告
暂无公告