sql查询结果拼接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql查询结果拼接相关的知识,希望对你有一定的参考价值。

有两张表 1:class id name
1 班级1
2 班级2

2:student classid name
2 张三
2 李四
1 王五
2 小赵
1 小明

我想用一条语句查出如下效果
classid students
1 王五,小明
2 张三,李四,小赵
就是把每个班级下的学生姓名拼接起来
group by出来的多条数据,不知道怎么合并或者用其他方法怎么写

参考技术A ;
with class as (
select '1' as class_id,'班级1' as name
union
select '2','班级2'
),
student as (
select '2' as classid,'张三' as name
union
select '2','李四'
union
select '1','王五'
union
select '2','小赵'
union
select '1','小明'
)

select classid,
u_type=stuff((select ','+name from student where k.classid=classid for XML path('')),1,1,'')
from student k
group by classid
classid u_type
------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 王五,小明
2 李四,小赵,张三

(2 行受影响)本回答被提问者采纳
参考技术B 不知道你什么数据库。

反正我是 Oracle , DB2, SQL Server , mysql, PostgreSQL 都测试过。

http://hi.baidu.com/wangzhiqing999/item/b0b5f8b11707de7f244b0923
参考技术C 你可以把取出来的结果集拿出来,然后再拼接起来 参考技术D 什么数据库?

将oracle 查询结果列拼接为字符串

表中的原始数据为
id name
1 a
1 b
1 c
2 a
2 b
3 a
3 c
.......
现在想查询显示的结果为
id name
1 a,b,c
2 a,b
3 a,c
.......
sql语句咋写 在线等谢谢!急!!!!!

参考技术A create table test (id int, name varchar(10) )
insert into test values (1,'a')
insert into test values (1,'b')
insert into test values (1,'c')
insert into test values (2,'a')
insert into test values (2,'b')
insert into test values (3,'a')
insert into test values (3,'c')

select id,sys_connect_by_path(name,',') from (
select id,name, row_number() over(partition by id order by name)rn,
count(*) over(partition by id ) cnt from test
) a where level=cnt
start with rn=1 connect by prior id=id and prior rn=rn-1

测试后 可用。

一楼的回答其实最容易理解了。你把它修改成动态sql 就可以了。可以不受限制了。本回答被提问者采纳
参考技术B 个数有限,可以实现
select id, max(case when rk = 1 then name else '' end)
||','||max(case when rk = 2 then name else '' end)
||','||max(case when rk = 3 then name else '' end)
from (SELECT id, name,row_number() over(partition by id order by name) rk from tab) t
group by id追问

个数是不无限的,具体的值不确定,是根据关联关系出来的

追答

那自己写存储过程吧,sql不是万能的。

参考技术C select t.id, WMSYS.WM_CONCAT(t.Name) name From table_name t GROUP BY t.id追问

中文会出现乱码,咋解决

以上是关于sql查询结果拼接的主要内容,如果未能解决你的问题,请参考以下文章

sql查询结果拼接

SQL server 两个查询结果拼接成一个,语句改怎样修改?

sql语句查询结果如何大写?结果如何拼接啊?

sql查询结果直接拼接

将oracle 查询结果列拼接为字符串

SQL查询结果拼接成字符串