2009-12-22 2 views
0

Possible en double:
TSQL query to concatenate and remove common prefixcompilation seule chaîne à partir des résultats sql

Salut

Comment peut-on Dressez une seule chaîne à partir des résultats d'une requête SQL.

E.g.

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

La requête SQL résultante doit renvoyer une seule ligne avec le résultat sous forme de chaîne unique.

E.g.

"John, Sam, Kate" 

Remarque: L'utilisation de MS SQL 2005

+0

Dupliquer d'au moins http://stackoverflow.co m/questions/944160 et http://stackoverflow.com/questions/194852, probablement beaucoup plus ... – Heinzi

+0

Un autre: http://stackoverflow.com/questions/6899 – Heinzi

Répondre

3

C'est ce que je l'habitude d'utiliser, il suffit de retirer la table et ajoutez votre propre:

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] 

devrait se traduire par:

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

Utilisez un curseur. Quelque chose comme ça (de here) devrait vous aider à démarrer:

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

SET NOCOUNT ON

DECLARE @c INT, @p VARCHAR (8000), @cNext INT, @pNext 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;

0

façon rapide et sale de le faire, pas beaucoup de vérification d'erreur, mais cela fonctionne ...

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 
Questions connexes