当前位置: 代码迷 >> Oracle开发 >> 动态队列转换,求指点
  详细解决方案

动态队列转换,求指点

热度:30   发布时间:2016-04-24 07:23:06.0
动态行列转换,求指点
大家好,
基础数据为

姓名 兴趣
a , 看书
b , 篮球
a , 旅行
a , 足球
b , 看书


想要实现的视图的效果为:

姓名 兴趣1 兴趣2 兴趣3 兴趣4 兴趣5
a 看书 旅行 足球 无 无
b 篮球 看书 无 无 无

主要的问题在于不能把列定死了,如第一列就都放看书,第二列都放旅行之类的。。。
要实现有值就往前面的列里面插入的效果。大家对这个有什么好的想法吗,谢谢指点哈!

 

------解决方案--------------------
如果兴趣列数确定,可以如下
SQL code
WITH TB AS (SELECT 'a' AS 姓名, '看书' AS 兴趣    FROM DUAL  UNION ALL  SELECT 'b' AS 姓名, '篮球' AS 兴趣    FROM DUAL  UNION ALL  SELECT 'a' AS 姓名, '旅行' AS 兴趣    FROM DUAL  UNION ALL  SELECT 'a' AS 姓名, '足球' AS 兴趣    FROM DUAL  UNION ALL  SELECT 'b' AS 姓名, '看书' AS 兴趣 FROM DUAL)SELECT 姓名,       NVL(MAX(DECODE(CNT, 1, 兴趣)), '无') 兴趣1,       NVL(MAX(DECODE(CNT, 2, 兴趣)), '无') 兴趣2,       NVL(MAX(DECODE(CNT, 3, 兴趣)), '无') 兴趣3,       NVL(MAX(DECODE(CNT, 4, 兴趣)), '无') 兴趣4,       NVL(MAX(DECODE(CNT, 5, 兴趣)), '无') 兴趣5  FROM (SELECT 姓名,               兴趣,               ROW_NUMBER() OVER(PARTITION BY 姓名 ORDER BY 兴趣) CNT          FROM TB) T GROUP BY T.姓名
  相关解决方案