从sql结果编译单个字符串

时间:2009-12-22 10:08:36

标签: sql-server

  

可能重复:
  TSQL query to concatenate and remove common prefix

您好

如何从SQL查询的结果中编译单个字符串。

E.g。

Table A
Column: Name
Row 0 : John
Row 1 : Sam
Row 2 : Kate

生成的SQL查询必须返回一行,结果为单个字符串。

E.g。

"John, Sam, Kate"

注意:使用MS SQL 2005

4 个答案:

答案 0 :(得分:3)

这是我通常使用的,只需删除表格并添加自己的表格:

DECLARE @A
  TABLE ( Name VARCHAR(50) );

INSERT INTO @A ([Name]) VALUES ('John');
INSERT INTO @A ([Name]) VALUES ('Sam');
INSERT INTO @A ([Name]) VALUES ('Kate');

SELECT REPLACE((SELECT [Name] AS [data()]
  FROM @A
   FOR XML PATH('')
     ) , ' ', ', ') [Concatenated]

应该导致:

Concatenated
-------------------
John, Sam, Kate

答案 1 :(得分:2)

GROUP_CONCAT

修改

可以看到等效here

答案 2 :(得分:0)

使用光标。这样的事情(来自here)应该让你开始:

  

DECLARE @tbl TABLE(id INT PRIMARY KEY,list VARCHAR(8000))

     

设置NOCOUNT

     

DECLARE @c INT,@ p VARCHAR(8000),@ cNext INT,@ pxtxt VARCHAR(40)

   DECLARE c CURSOR FOR 

   SELECT CategoryId, ProductName 

     FROM Northwind..Products 

    ORDER BY CategoryId, ProductName ;

   OPEN c ;

   FETCH NEXT FROM c INTO @cNext, @pNext ;

   SET @c = @cNext ;

   WHILE @@FETCH_STATUS = 0 BEGIN 

        IF @cNext > @c BEGIN 

             INSERT @tbl SELECT @c, @p ;

             SELECT @p = @PNext, @c = @cNext ;

        END ELSE 

             SET @p = COALESCE(@p + ',', SPACE(0)) + @pNext ;

        FETCH NEXT FROM c INTO @cNext, @pNext 

   END 

   INSERT @tbl SELECT @c, @p ;

   CLOSE c ;
     

DEALLOCATE c;

     

SELECT * FROM @tbl;

答案 3 :(得分:0)

快速而肮脏的方式,而不是很多错误检查,但它的工作......

DECLARE @theList VARCHAR(2000)
SET @theList =''

SELECT @TheList=@theList+[name]+','
FROM <tableName> WHERE [name] is not null

IF @@rowcount > 0
    SET @TheList=left(@TheList,len(@TheList)-1)

PRINT @theList