一个多表查询语句,请教各位大虾

短短的 2017-05-24 08:41:10
表一,
ID,FL
ID 为主键
表二,
ID,NUM
表二没有主键,表二中间 ID 会多次出现

实现效果
创建一个试图将表二中和表一一样的ID 的NUM 调出来,以 逗号的形式显示出来
最终显示
ID,FL,NUM
id,fl,(num1,num2,num3)
...全文
230 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2017-05-25
  • 打赏
  • 举报
回复
卖水果的net 2017-05-24
  • 打赏
  • 举报
回复

create table a(id int, fl varchar(10))
go
create table b(id int, num varchar(10))
go
insert into a values(100,'xx'),(200,'yy'),(300,'zz')
insert into b values(100,'A'),(100,'B'),(100,'C'),(200,'XA'),(200,'YB'),(200,'ZC')
go
-- SQL 2000 ,要自定义这个函数,只是通用性不强
create function fn_agg(@id int)
returns varchar(30)
begin
	declare @ret varchar(30) = ''
	select @ret = @ret + ',' + num from b where id = @id
	set @ret = stuff(@ret,1,1,'')
	return @ret
end
go

select id, fl, dbo.fn_agg(id) newcol
from a
go
drop table a,b
drop function fn_agg
go


id          fl         newcol
----------- ---------- ------------------------------
100         xx         A,B,C
200         yy         XA,YB,ZC
300         zz         NULL

(3 行受影响)


短短的 2017-05-24
  • 打赏
  • 举报
回复
不能使用,问题出哪里呢,帮主帮我看看 我的是 sql2000
短短的 2017-05-24
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:

create table a(id int, fl varchar(10))
go
create table b(id int, num varchar(10))
go
insert into a values(100,'xx'),(200,'yy'),(300,'zz')
insert into b values(100,'A'),(100,'B'),(100,'C'),(200,'XA'),(200,'YB'),(200,'ZC')
go
select id, fl, 
stuff((select ',' + num from b where a.id = b.id for xml path('')),1,1,'') newcol
from a
go
drop table a,b
go


id          fl         newcol
----------- ---------- ------------
100         xx         A,B,C
200         yy         XA,YB,ZC
300         zz         NULL

(3 行受影响)


服务器: 消息 170,级别 15,状态 1,行 1 第 1 行: ',' 附近有语法错误。 服务器: 消息 170,级别 15,状态 1,行 2 第 2 行: ',' 附近有语法错误。 服务器: 消息 170,级别 15,状态 1,行 2 第 2 行: 'xml' 附近有语法错误。
  • 打赏
  • 举报
回复
就 用for xml path 可以搞定
卖水果的net 2017-05-24
  • 打赏
  • 举报
回复

create table a(id int, fl varchar(10))
go
create table b(id int, num varchar(10))
go
insert into a values(100,'xx'),(200,'yy'),(300,'zz')
insert into b values(100,'A'),(100,'B'),(100,'C'),(200,'XA'),(200,'YB'),(200,'ZC')
go
select id, fl, 
stuff((select ',' + num from b where a.id = b.id for xml path('')),1,1,'') newcol
from a
go
drop table a,b
go


id          fl         newcol
----------- ---------- ------------
100         xx         A,B,C
200         yy         XA,YB,ZC
300         zz         NULL

(3 行受影响)


22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧