数据 表 test有2个字段
id name
1 张三
2 李四
1 王五
要求最后显示:
id name
1 张三,王五
2 李四
数据库环境: oracle 9/10
id name
1 张三
2 李四
1 王五
要求最后显示:
id name
1 张三,王五
2 李四
数据库环境: oracle 9/10
解决方案 »
- 求教oracle11g 数据库备份
- 懂hql的进来看看,帮帮忙
- 直接用代码可以执行,建成存储过程后,不能执行
- SQL语句 转换为ORACLE 怎么写 ???????~~~~~~~!!!!!!
- oracle 触发器 动态SQL(高难度)帮我解决了话可以再另外加分
- 各路英雄,能否讨论下Oracle的JDBC实现上的问题,在select时貌似一次全将记录集load到内存了
- 我是新手,作业为何不能运行?
- 好久未解决的问题:怎样在dos下执行sql脚本文件?
- help!!!the install of oracle8i on linux9 is going now.......
- vc如何通过ADO调用输入参数为记录类型的oracle存储过程
- 一个简单的循环处理,请高手帮忙解答,感谢!
- 索引使用疑问
group by id
10g可以用用wm_concat
select id,wm_concat(name) from table group by id;
9i的话可以使用分析函数和SYS_CONNECT_BY_PATH
with t1 as (select id,name,row_number()over(partition by id order by name asc) rn)
select id,SYS_CONNECT_BY_PATH(name,',') from t1 where connect_by_isleaf=1
connect by prior rn=rn-1;
来构造树
start with rn = 1---开始选where lvele = rn --只选最大的level 列用sys_connect_path(name,',')(记不清了,可能函数不是这样写的) 最后用rtim()去掉前面的,给个思路,准确函数名及用法楼主搜索下
参考:之前我写的
http://topic.csdn.net/u/20100811/16/fb729a12-7fdc-472b-ab62-62364e630ece.html
SQL>
SQL> WITH t1 AS(SELECT ID,NAME,row_number()over(PARTITION BY ID ORDER BY ROWID) rn FROM test)
2 SELECT ID,sys_connect_by_path(NAME,',') FROM t1 WHERE connect_by_isleaf=1 START WITH rn=1 CONNECT BY PRIOR rn=rn-1 AND PRIOR ID=ID
3 ;
ID SYS_CONNECT_BY_PATH(NAME,',')
---- --------------------------------------------------------------------------------
1 ,张三,王五
2 ,李四
SQL>
WITH t1 AS(SELECT ID,NAME,row_number()over(PARTITION BY ID ORDER BY ROWID) rn FROM test)
SELECT ID,sys_connect_by_path(NAME,',') FROM t1 WHERE connect_by_isleaf=1 START WITH rn=1 CONNECT BY PRIOR rn=rn-1 AND PRIOR ID=ID;