姓名 套餐
张三 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 说明
------解决方案--------------------
第一个方法不好的地方是当套餐不固定或 种类比较多时,书写的语句比较庞大