重复多行显示为一行多列有关问题,求

重复多行显示为一行多列问题,求高手指点
姓名     套餐  

张三    66元
张三    96元
李四    126元
王五    156元
王五    46元
王五     96元
王五    66元

以上怎样变成

姓名     套餐1  套餐2  套餐3   套餐4

张三     66元   96元
李四     126元
王五     156元  46元  96元      66元

------解决方案--------------------
SELECT 姓名,
SUM(DECODE(RN,1,套餐)) AS 套餐1,
SUM(DECODE(RN,2,套餐)) AS 套餐2,
SUM(DECODE(RN,3,套餐)) AS 套餐3,
SUM(DECODE(RN,4,套餐)) AS 套餐4
FROM
(select 姓名,套餐,row_number() over(partition by 姓名,order by 套餐) as rn from T)
GROUP BY 姓名
ORDER BY 姓名

------解决方案--------------------
套餐 字段 如果为文本类型,请将sum改为max即可
------解决方案--------------------
如果数据库版本为11g以后版本可以考虑使用pivot /unpivot
Oracle 11g 行列互换 pivot 和 unpivot 说明
------解决方案--------------------
第一个方法不好的地方是当套餐不固定或 种类比较多时,书写的语句比较庞大