求1条查询语句

kinlin 2004-04-29 04:04:48
有一个表:A
字段1 字段2
a 9
b 6
a 2
c 17
a 7
b 20
c 12
a 14
c 1
c 0
想得出以下的结果,就是按“字段1”分组,按字段2排序,然后取出每一组的前三条记录,作为字段横向展开

字段1 字段2_1 字段2_2 字段2_3
a 2 7 9
b 6 20
c 0 1 12


...全文
16 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
beckhambobo 2004-04-29
DENSE_RANK() over(partition by col1 order by col2) dk
你的方法已够用了
  • 打赏
  • 举报
回复
bzszp 2004-04-29
这样效率很差吗?
列变行这样做是必需的。
  • 打赏
  • 举报
回复
kinlin 2004-04-29
select col1,MAX(decode(rk,1,col2,0)),MAX(decode(rk,2,col2,0)),MAX(decode(rk,3,col2,0))
from(
(
select col1,col2,rank() over(partition by col1 order by col2) rk
from tb)
where rk<4)
GROUP BY w.col1
这样可以解决,但不知是否有更好的方法?
  • 打赏
  • 举报
回复
ern 2004-04-29
报什么错?应该没问题啊
  • 打赏
  • 举报
回复
kinlin 2004-04-29
好像有点问题,提示出错,把sum()去了就好了,可是得不到想要的结果
  • 打赏
  • 举报
回复
bzszp 2004-04-29

select col1,sum(decode(rk,1,col2,0)),sum(decode(rk,2,col2,0)),sum(decode(rk,3,col2,0))
from(
(
select col1,col2,rank() over(partition by col1 order by col2) rk
from tb)
where rk<4)
  • 打赏
  • 举报
回复
相关推荐
发帖
基础和管理

1.7w+

社区成员

Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
帖子事件
创建了帖子
2004-04-29 04:04
社区公告
暂无公告