求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


...全文
38 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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)

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧