有时候需要将在数据库中查询的结果集(显示为不同列)中每一列的数据整合成一条用某一符号(例如“;”)相连的一条数据,如下:
转换为数据:
在程序中控制比较简单,可以查出datatable,然后循环获取。本文介绍在SQL存储过程中直接得出结果。
代码如下:
Label开始 declare @DocID varchar(50) select @DocID=DocID from Information where InfoID=@Fid declare @TABEL table( LABEL varchar(50) ) INSERT INTO @TABEL SELECT LL.LABEL FROM INFOLABEL AS IL LEFT JOIN LABEL AS LL ON IL.LABELID = LL.LABELID WHERE IL.DOCID = @DOCID DECLARE @LABELS VARCHAR(200) DECLARE @LABEL VARCHAR(50) SET @LABELS = '' --删除空和null的数据 DELETE FROM @TABEL WHERE LABEL IS NULL OR LABEL = '' WHILE(EXISTS(SELECT TOP 1 1 FROM @TABEL)) BEGIN SELECT TOP 1 @LABEL = LABEL FROM @TABEL SET @LABELS = @LABELS + @LABEL + ';' DELETE FROM @TABEL WHERE LABEL = @LABEL END IF(@LABELS <> '' AND @LABELS IS NOT NULL) BEGIN SET @LABELS = SUBSTRING(@LABELS,0,LEN(@LABELS)) END ---Label结束
大体流程:
1.获取结果集;
2.建立临时表:
declare @TABEL table( LABEL varchar(50) )
3.往临时表里插入查到的结果集;
4.删除临时表中为空的列;
5.用while循环 每循环一条将查询的数据加上间隔符号“;”插入到变量@LABELS 中;
6.每一次循环最后删除刚刚循环的这条数据,一边进入下一条数据,防止重复;
7.如果变量@LABELS 不为空不为NULL,用SUBSTRING函数截取,去掉最后一个“;”。