有一个表: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
...全文
386打赏收藏
求1条查询语句
有一个表: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
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
这样可以解决,但不知是否有更好的方法?
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)