回 帖 发 新 帖 刷新版面

主题:[讨论]求算法.....在线等.............................


行列转换--合并

有表A,
id pid
1   1
1   2
1   2
1   2
1   3
2   1
2   2
3   1
如何化成表B:
id pid
  1  1,2,3
  2  1,2
  3  1
而不是这样的转化成表C
id pid
  1  1,2,2,2,3
  2  1,2
  3  1
我的意思是把表C的 pid 这一列不要有重复的值 输出的结果
像表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

--调用自定义函数得到结果
select distinct id,dbo.fmerg(id) from 表A

得到的是这样的结果
而不是这样的转表B
id pid
  1  1,2,2,2,3
  2  1,2
  3  1[em1][em4][em4][em4][em18][em18][em18][em18]

回复列表 (共5个回复)

沙发

把你函数中的表A替换成
(select distinct id,pid from A) as B即可

板凳

非常感谢,!名为gggmmtddir的师兄。。问题解决了。

3 楼

gggmmtddir的师兄,还有个的问题想求教您。
如果我想在前台的检索
表B
id pid
  1  1,2,3
  2  1,2
  3  1
我输入3,2,1或2,3,1或1,2,3都能检索出来结果
id  pid
 1  1,2,3
就是说前台无序的输入1,2,3都能检索到这样的结果,

4 楼

(select distinct id,pid from A order by pid) as B加上排序,不知行不?自己试下吧

5 楼

知道到了..谢谢..

我来回复

您尚未登录,请登录后再回复。点此登录或注册