注册 登录
编程论坛 SQL Server论坛

[讨论] 行列转换--合并 问题

fqbnet2008 发布于 2007-06-12 10:29, 757 次点击

2. 行列转换--合并

有表A,
id pid
1 1
1 2
1 3
2 1
2 2
3 1
如何化成表B:
id pid
1 1,2,3
2 1,2
3 1

创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(pid as varchar) from 表A where
id=@id set @str=right(@str,len(@str)-1)
return(@str)
End
go


以上是引用 https://bbs.bc-cn.net/viewthread.php?tid=15174 中的内容

我试了一下 ,好像不行
我的Uni_A
id pid
1 4
2 5
4 7
5 9
1 3
2 7
3 9
3 6
3 4

id int,pid char(10)

我的Uni_B
id pid
1 ,3
2 ,7
3 ,6 ,4
4
5


id int pid varchar(100)


我把语句修改了一下
create function fmerg(@nid int )
returns varchar(100)
as
begin
declare @str varchar(100)
set @str=''
select @str=@str+','+ltrim(pid) from Uni_A where id
=@nid
order by id
set @str=substring(@str,charindex(@str,',')+2,len(@str))
return(@str)
end
go
delete from Uni_B
go
insert into Uni_B select distinct id ,dbo.fmerg(id) from Uni_A

go
select * from Uni_B

得到Uni_B

id pid
1 4 ,3
2 5 ,7
3 9 ,6 ,4
4 7
5 9


怎么才能把pid变成4,3 而不是4 ,3???






3 回复
#2
fqbnet20082007-06-12 10:32
我试了一下如果Uni_A 的pid 为int的话,就行了

结果就是 4,3 了。
#3
初学Delphi2007-06-12 11:46

方法应该没错,可能你在创建表的时候pid用的char字符类型吧

#4
fqbnet20082007-06-12 13:33
楼上说的对,方法是没有错,如果把pid改成int型就好了,不会出现4  ,    3 这种情况了
1