--1.创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(SiblingGroupID as varchar) from 学生表 where id=@id
set @str=right(@str,len(@str)-1)
return(@str)
go--调用自定义函数得到结果
select distinct 学号,dbo.fmerg(SiblingGroupID) from 学生表
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(SiblingGroupID as varchar) from 学生表 where id=@id
set @str=right(@str,len(@str)-1)
return(@str)
go--调用自定义函数得到结果
select distinct 学号,dbo.fmerg(SiblingGroupID) from 学生表
其实我最终的目的是想在水晶表里打印出来,Sibling(兄弟姐妹)放在一格里,
也说是想把重复记录转横
假设你的学生表中有两个字段:Sibling,name
要将Sibling相同的name转横.--为数据处理生成临时表
select id=identity(int,1,1),Sibling,name into #tb from 学生表--生成查询的查询语句
declare @i int,@im varchar(20),@sql varchar(8000)select @sql='',@i=aa,@im=cast(aa-1 as varchar)
from(select top 1 Sibling,count(Sibling) as aa
from #tb group by Sibling order by count(Sibling) desc) awhile @i>0
select @sql=char(13)+',max(case id % '+@im+' when '+cast(@i-1 as varchar)
+' then name end) as [name'+cast(@i as varchar)+']'+@sql
,@i=@i-1
set @sql='select Sibling'+char(13)+@sql
+char(13)+'from #tb group by Sibling'--执行生成的SQL语句,得到结果
exec(@sql)