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.   

    好像有点问题,提示出错,把sum()去了就好了,可是得不到想要的结果
      

  2.   

    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
    这样可以解决,但不知是否有更好的方法?
      

  3.   

    DENSE_RANK() over(partition by col1 order by col2) dk
    你的方法已够用了