急求高手出现,大力、邹建等大哥在吗?在线等

Anhowe 2006-06-29 06:09:06
表A
A1 A2
001 深圳
002 广州
表B

B1 B2
001 罗湖
001 南山
001 福田
002 天河

现想通过查询得出如下结果
A1 A2 B2
001 深圳 罗湖,南山,福田
002 广州 天河

条件A.A1=B.B1

谢谢大哥们,在线等。。。。。。。。
...全文
272 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2006-06-29
  • 打赏
  • 举报
回复
-- sql 2005 适用

if object_id('TableA') is not null drop table tableA
go
create table TableA
(
A1 varchar(3),
A2 varchar(4)
)
insert into TableA
select '001','深圳' union all
select '002','广州'
go
if object_id('TableB') is not null drop table tableB
go
create table TableB
(
B1 varchar(3),
B2 varchar(4)
)
insert into TableB
select '001','罗湖' union all
select '001','南山' union all
select '001','福田' union all
select '002','天河'
go

select *
from tableA A
OUTER APPLY(
SELECT B2 = STUFF(REPLACE(REPLACE((
SELECT v = B2 FROM TableB B
WHERE B1 = A.A1
FOR XML AUTO), '<B v="', ','), '"/>', ''), 1, 1, '')
)B
go

drop table tablea, tableb

/*-- 结果
A1 A2 B2
---- ---- --------------------
001 深圳 罗湖,南山,福田
002 广州 天河

(2 行受影响)
--*/
Anhowe 2006-06-29
  • 打赏
  • 举报
回复
谢谢大侠们
liangpei2008 2006-06-29
  • 打赏
  • 举报
回复
还有11分呢,痛苦啊
LouisXIV 2006-06-29
  • 打赏
  • 举报
回复
兄弟还没有升星哪^^
liangpei2008 2006-06-29
  • 打赏
  • 举报
回复
夜大侠写得真是网际快车不如掩耳啊:D
LouisXIV 2006-06-29
  • 打赏
  • 举报
回复
还好数据库里有现成的函数,拿来小改一下就可以了:)
liangpei2008 2006-06-29
  • 打赏
  • 举报
回复
帮兄弟!累也不说累:)
liangpei2008 2006-06-29
  • 打赏
  • 举报
回复
create table 表(A1 varchar(100),A2 varchar(100))
insert into 表 select '001','深圳'
insert into 表 select '002','广州'
Go
------------
create table 表1(B1 varchar(100),B2 varchar(100))
insert into 表1 select '001','罗湖'
insert into 表1 select '001','南山'
insert into 表1 select '001','福田'
insert into 表1 select '002','天河'
go

create function f_str(@B1 varchar(100))
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+','+B2 from 表1 where B1 = @B1
set @ret = stuff(@ret,1,1,'')
return @ret
end
go


--执行
select A.* ,b.B2 from 表 A inner join
(select B1,B2=dbo.f_str(B1) from 表1 group by B1 ) B
on A.A1=B.B1
LouisXIV 2006-06-29
  • 打赏
  • 举报
回复
--稍微改良一下效率

select a.a1,a.a2,dbo.f_test(a1)as b2
from tablea a
inner join
tableB b
on a.a1=b.b1
group by a.a1,a.a2
LouisXIV 2006-06-29
  • 打赏
  • 举报
回复
if object_id('TableA') is not null drop table tableA
go
create table TableA
(
A1 varchar(3),
A2 varchar(4)
)
insert into TableA
select '001','深圳' union all
select '002','广州'
go
if object_id('TableB') is not null drop table tableB
go
create table TableB
(
B1 varchar(3),
B2 varchar(4)
)
insert into TableB
select '001','罗湖' union all
select '001','南山' union all
select '001','福田' union all
select '002','天河'
go
create function dbo.f_test(@a varchar(3))
returns varchar(50)
as
begin
declare @b varchar(50)
set @b=''
select @b=@b+b2+','
from TableB
where B1=@a
set @b=left(@b,len(@b)-1)
return (@b)
end
GO
select a.a1,a.a2,b.b2
from tablea a
inner join
(select b1,dbo.f_test(b1)as b2 from tableB group by b1)b
on a.a1=b.b1

/*
a1 a2 b2
---- ---- --------------------------------------------------
001 深圳 罗湖,南山,福田
002 广州 天河
*/
gahade 2006-06-29
  • 打赏
  • 举报
回复
写函数,传入B1的编号,返回该编号的所有B2的值
然后用left join B2
LouisXIV 2006-06-29
  • 打赏
  • 举报
回复
又是字符串合并^^;

都不高兴写了

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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