SQL如何查询两个表连接明细表结果用分隔符分开?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL如何查询两个表连接明细表结果用分隔符分开?相关的知识,希望对你有一定的参考价值。
对数据库不是太懂,请各位老师帮忙看一下,问题如下:有两个表 学生表(字段有学生编号,姓名,),科目表(字段有学生编号,科目编号,科目名称),现学生表有编号01,姓名学生A,报有有两个科目(学生编号01,科目编号1,科目名称语文 学生编号01,科目编号2,科目名称数学),想实现下图的查询结果:
'''
CREATE TABLE T_Students
(
ID varchar(50),
F_Name varchar(50)
)
CREATE TABLE T_Subjects
(
Student_ID varchar(50),
Subject_ID varchar(50),
F_SubjectName varchar(50)
)
insert T_Students values ('01','A')
insert T_Subjects values ('01','1','语文')
insert T_Subjects values ('01','2','数学')
insert T_Students values ('02','B')
insert T_Subjects values ('02','1','语文')
insert T_Subjects values ('02','2','数学')
select a.ID,a.F_Name,stuff((select ','+Subject_ID from T_Subjects
where Student_ID=a.ID for xml path('')),1,1,'') as SubjectID,stuff((select ','+F_SubjectName from T_Subjects
where Student_ID=a.ID for xml path('')),1,1,'') as SubjectName
from T_STudents as a group by ID,F_Name
'''
参考技术A需要用到stuff函数:
例:
id name
1 张三
1 李四
2 王五
2 赵六
结果:
Id name
1 张三,李四
2 王五,赵六
创建测试表及插入数据:
create table test(id int,
name varchar(10))
insert into test values (1,' 张三')
insert into test values (1,' 李四')
insert into test values (2,' 王五')
insert into test values (2,' 赵六')
执行语句:
where a.id=id for xml path('')),1,1,'') as name
from test as a group by id
执行结果截图:
参考技术B
需要用到stuff函数:
例:
id name
1 张三
1 李四
2 王五
2 赵六
结果:
Id name
1 张三,李四
2 王五,赵六
创建测试表及插入数据:
create table test(id int,
name varchar(10))
insert into test values (1,' 张三')
insert into test values (1,' 李四')
insert into test values (2,' 王五')
insert into test values (2,' 赵六')
执行语句:
where a.id=id for xml path('')),1,1,'') as name
from test as a group by id
执行结果截图:
追问
我看到有些用inner join或者 left join的,适用这种方法能实现我之前说的要求吗?stuff这个函数我试过了,那个单机软件不支持
本回答被提问者采纳 参考技术C 因为你没有提供具体的数据库类型,所以我写了三种语法:Oracle语法:
select a.学生编号,
a.姓名,
listagg(b.科目编号, ',') within group( order by b.科目编号) 科目编号,
listagg(b.科目名称, '+') within group( order by b.科目编号) 科目名称
from 学生表 a,
科目表 b
where a.学生编号 = b.学生编号
group by a.学生编号,
a.姓名;
SqlSerVer语法:
select
t.学生编号,
t.姓名,
left ( t.科目编号, len( t.科目编号 ) - 1 ) 科目编号,
left ( t.科目名称, len( t.科目名称 ) - 1 ) 科目名称
from
(
select
a.*,
( select b.科目编号 + ',' from 科目表 b where a.学生编号 = b.学生编号 order by b.科目编号 for xml path ( '' ) ) 科目编号,
( select b.科目名称 + '+' from 科目表 b where a.学生编号 = b.学生编号 order by b.科目编号 for xml path ( '' ) ) 科目名称
from
学生表 a
) t;
mysql语法:
select
a.学生编号,
a.姓名,
group_concat( b.科目编号 order by b.科目编号 separator ',' ) 科目编号,
group_concat( b.科目名称 order by b.科目编号 separator '+' ) 科目名称
from
学生表 a,
科目表 b
where
a.学生编号 = b.学生编号
group by
a.学生编号,
a.姓名;
以上是关于SQL如何查询两个表连接明细表结果用分隔符分开?的主要内容,如果未能解决你的问题,请参考以下文章