高分请教高手,应该如何写SQL语句或者存储过程,把表A的格式存成表B的格式?

moshaocong 2007-02-05 02:37:24
表A

SID ACCOUNT

1 王大

1 张三

2 李四

2 钱武



表B

SID ACCOUNT

1 王大,张三,

2 李四,钱五,

...全文
325 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlp321002 2007-02-05
  • 打赏
  • 举报
回复
declare @t table( sid int ,account varchar(10))
insert into @t select 1,'王大'
union all select 1,'张三'
union all select 2,'李四'
union all select 2,'钱武'

SELECT *
FROM(
SELECT DISTINCT
sid
FROM @t
)A
OUTER APPLY(
SELECT
[values]= STUFF(REPLACE(REPLACE(
(
SELECT account FROM @t N
WHERE sid= A.sid
FOR XML AUTO
), '<N account="', ','), '"/>', ''), 1, 1, '')+','
)N

/*
sid values
----------- -------------
1 王大,张三,
2 李四,钱武,

(2 行受影响)

*/
moshaocong 2007-02-05
  • 打赏
  • 举报
回复
正在测试中,谢谢楼上提供的方法
playwarcraft 2007-02-05
  • 打赏
  • 举报
回复
create function fn_test(@sid int)
returns varchar(100)
AS
begin
declare @str varchar(100)
set @str=''
select @str=@str+ACCOUNT+',' from 表A where sid=@sid
return @str
end

GO
insert into 表B
select SID ,fn_test(SID) as ACCOUNT
from 表A
group by SID
九斤半 2007-02-05
  • 打赏
  • 举报
回复
函数,参考:

--测试数据
create table csdn(id int,txt varchar(10))
insert csdn
select 1,'a' union all
select 1,'b' union all
select 1,'c' union all
select 2,'aa' union all
select 2,'bb' union all
select 2,'cc' union all
select 3,'aaa' union all
select 3,'bbb'
--select * from csdn
go

create function Gettxt(@id int)
returns varchar(8000)
as
begin
declare @s varchar(8000)
set @s=''
select @s=@s +',' +txt from csdn where id=@id
--return @s
return stuff(@s,1,1,'')
end
go

select id,dbo.Gettxt(id) txt from csdn group by id
go

drop function Gettxt
drop table csdn
OracleRoob 2007-02-05
  • 打赏
  • 举报
回复
如果不用函数,就得用游标。
OracleRoob 2007-02-05
  • 打赏
  • 举报
回复
需要借助函数处理。

22,209

社区成员

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

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