declare @test table( name varchar(10)) insert into @test values('a') insert into @test values('b') insert into @test values('c') insert into @test values('d') SELECT * FROM @test select distinct (select cast(name AS varchar(2))+','from @test for xml
把一列数据拼接成一个字符串比较简单: declare @test varchar(500) set @test=''; select @test=@test+name+',' from person select @test 但是如果数据中有重复选项,想去掉重复的就比较绕弯了. ) set @test=''; select distinct @test=@test+name+',' from person select @test 加distinct是不行的,我在sql server 2008
最近在项目中遇到个问题,需要将表中某列字段合并成字符串输出,如果直接通过代码全部读取出来,再遍历进行拼接显然不是最好的方法,所以想着能否在数据读取的时候直接拼接好返回,网上搜了可通过for xml来实现. 首先,准备好需要的数据,脚本如下: if exists (select * from sysObjects where id=object_id('Student')) drop table Student go create table Student ( Id int, Name ) )
查询出数据 SELECT a.ID AS KYMain_ID , ',' + a.Leader + ',' AS KYMain_Leader , ), b.TaskLeader) FROM TB_KYChildProject b WHERE b.MainProjectID = a.ID ) FOR XML PATH('') ), , , '') + ',' AS KYChild_Leader , ), b.Single_Leader) FROM TB_KYSubProject b WHERE b
关于和并列的 要这种效果. create table tb(idint, value varchar(10)) insert into tbvalues(1,'aa') insert into tbvalues(1,'bb') insert into tbvalues(2,'aaa') insert into tbvalues(2,'bbb') insert into tbvalues(2,'ccc') go /* stuff(param1, startIndex, length
当使用:SELECT ','+Id FROM dbo.Test FOR XML PATH('')); //这样读取的数据虽然是1,2,3,4,但是仍然是xml格式,所以当数据超过2033时候,用sqldatereader或者sqldateadapter读取数据会截断xml文件. 此时要:SELECT STUFF((SELECT ','+Id FROM dbo.Test FOR XML PATH('')),1,1,'');//利用stuff函数将xml文件转换为一个字符串字段.就不会截断.