首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

动态队列转换,求指点

2012-09-07 
动态行列转换,求指点大家好,基础数据为姓名兴趣a, 看书b, 篮球a, 旅行a, 足球b, 看书想要实现的视图的效果

动态行列转换,求指点
大家好,
基础数据为

姓名 兴趣
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.姓名 

热点排行