2009-12-22 2 views
0

Можно создать дубликат:
TSQL query to concatenate and remove common prefixКомпиляция одну строку из SQL результатов

Привет

Как компилировать одну строку из результатов запроса 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

+0

Дубликат не менее http://stackoverflow.co m/questions/944160 и http://stackoverflow.com/questions/194852, возможно, еще много ... – Heinzi

+0

Еще один: http://stackoverflow.com/questions/6899 – Heinzi

ответ

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 
0

Используйте курсор. Что-то вроде этого (от here) должны получить вы начали:

DECLARE @tbl TABLE (ID INT PRIMARY KEY, список VARCHAR (8000))

SET NOCOUNT ON

DECLARE @c INT, @p УАКСНАК (8000), @cNext INT, @pNext УАКСНАК (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 с;

SELECT * FROM @tbl;

0

Быстрый и грязный способ сделать это, не много ошибок, но он работает ...

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

SELECT @[email protected]+[name]+',' 
FROM <tableName> WHERE [name] is not null 

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

PRINT @theList