重复多行显示为一行多列问题,求高手指点
姓名 套餐
张三 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 说明
------解决方案--------------------第一个方法不好的地方是当套餐不固定或 种类比较多时,书写的语句比较庞大