求助,oracle多行数据合并成一行

表test(id,name)数据如下:idname1张三2李四3王五要求查询显示形式如下(即把name字段的所有数据拼起来合并到一行显示)AllName张三-李四-王五s... 表test(id,name) 数据如下:
id name
1 张三
2 李四
3 王五
要求查询显示形式如下(即把name字段的所有数据拼起来合并到一行显示)
AllName
张三-李四-王五
sql语句该怎么写啊(数据库版本限制,不使用wm_concat函数)
展开
 我来答
Finish1983
2013-10-25 · TA获得超过762个赞
知道小有建树答主
回答量:1477
采纳率:100%
帮助的人:395万
展开全部
我现在身边没有 数据库环境 这个是我以前写的SQL
你看一下,修改一下就可以了

Oracle分组查询用逗号分隔结果SQL语句

表一:
学号 姓名
1 张三
2 李四
3 王五
。。。。
表二:
学号 选修课程
1 语文
1 数学
2 英语
2 语文
3 数学
3 英语
3 历史
。。。。。
要求查处结果
学好 姓名 选修课程所有课程名称以,隔开
1 张三 语文,数学
2 李四 英语,语文
3 王五 数学,英语,历史
;
create table a_lyh_test
as
select 1 as "学号" , '张三' as "姓名" from dual
union all
select 2 as "学号" , '李四' as "姓名" from dual
union all
select 3 as "学号" , '王五' as "姓名" from dual
;
create table b_lyh_test
as
select 1 as "学号" , '语文' as "选修课程" from dual
union all
select 1 as "学号" , '数学' as "选修课程" from dual
union all
select 2 as "学号" , '英语' as "选修课程" from dual
union all
select 2 as "学号" , '语文' as "选修课程" from dual
union all
select 3 as "学号" , '数学' as "选修课程" from dual
union all
select 3 as "学号" , '英语' as "选修课程" from dual
union all
select 3 as "学号" , '历史' as "选修课程" from dual
;
select f."学号"
,f."姓名"
,ltrim(max(sys_connect_by_path(f."选修课程",','))
keep (dense_rank last order by f.pnum),',') as "选修课程"
from
(
select t."学号"
,t."姓名"
,t."选修课程"
,row_number() over(partition by t."学号" order by t."姓名") as pnum
,row_number() over(partition by t."学号" order by t."姓名")-1 as lnum
from
(
select a."学号",a."姓名",b."选修课程"
from a_lyh_test a
,b_lyh_test b
where a."学号" = b."学号"
) t
) f
group by f."学号",f."姓名"
connect by f.lnum = prior f.pnum and f."学号" = prior f."学号"
start with f.pnum = 1;
追问
你的思路是对的,不过有点迟了。谢谢哦
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangxiaodi7428
2013-10-25 · TA获得超过313个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:95万
展开全部
select id ,listagg( name, ',' ) within group ( order by id ) as name

from TABLE_NAME
GROUP BY id;
追问
语法有错误
追答

我是试过了才粘上来的 没有错啊

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tianlanyijiu1
2013-10-25 · TA获得超过195个赞
知道小有建树答主
回答量:294
采纳率:100%
帮助的人:150万
展开全部
select (wm_concat(t.name)) as AllName from test t
注意数据库的限制长度
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lyman365
2013-10-25 · TA获得超过2135个赞
知道小有建树答主
回答量:751
采纳率:100%
帮助的人:383万
展开全部
select WM_CONCAT(name) from test
追问
说了不用WM_CONCAT ,用它早写了。我自己终于写出来了,但是由于字数限制,贴不了,还是3Q你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-10-25
展开全部
你这就是行转列,行数太多不建议这样做,有很多方法,典型的有decode,多写几个decode。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式