大家好,
基础数据为姓名 兴趣
a , 看书
b , 篮球
a , 旅行
a , 足球
b , 看书
想要实现的视图的效果为:姓名 兴趣1 兴趣2 兴趣3 兴趣4 兴趣5
a 看书 旅行 足球 无 无
b 篮球 看书 无 无 无主要的问题在于不能把列定死了,如第一列就都放看书,第二列都放旅行之类的
要实现有值就往前面的列里面插入的效果。大家对这个有什么好的想法吗,谢谢指点哈!
基础数据为姓名 兴趣
a , 看书
b , 篮球
a , 旅行
a , 足球
b , 看书
想要实现的视图的效果为:姓名 兴趣1 兴趣2 兴趣3 兴趣4 兴趣5
a 看书 旅行 足球 无 无
b 篮球 看书 无 无 无主要的问题在于不能把列定死了,如第一列就都放看书,第二列都放旅行之类的
要实现有值就往前面的列里面插入的效果。大家对这个有什么好的想法吗,谢谢指点哈!
解决方案 »
- 测试Oracle存储过程
- CONN /AS SYSDBA
- 如果将MSSQL的数据导入到Oracle中?
- 导出的dmp导入时报回滚段出错?
- 求助:估算每条记录有多大
- 有关sql优化调试!
- 请问:在ORACLE中,如何用客户机访问服务器?
- 使用sql*plus时, 用‘&’进行输入时.......?
- 急问:TNS-12571 TNS:packet writer failure
- oracle 11g 在不区分大小写的情况下,求出邮件地址中包含姓的员工信息。其中邮件以首字母大写的形式返回 怎么弄?
- 如何把有断行的段落取出来时只显示一行?
- 通过延时在两个activity之自动跳转,再通过按键跳到第三个activity后出现的问题?
http://topic.csdn.net/u/20100109/13/6a10c168-f190-4766-b838-adbf03c4ac7b.html?93286
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.姓名