SQL中将查询的结果集整合成一条信息

  有时需要将在数据库中查询的结果集(显示为不同列)中每一列的数据整合成一条用某一符号(例如“;”)相连的一条数据,如下:

 转换为数据:

  在程序中控制比较简单,可以查出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函数截取,去掉最后一个“;”。

原文地址:https://www.cnblogs.com/wxh19860528/p/3094461.html