2010-07-09 7 views
0

Disons que j'ai une table qui ressemble à ceci:fonction Sql à ajouter la colonne

Name  value 
1 Ford "some text here and there."  
2 Honda "More Text Again" 

Comment puis-je écrire une fonction SQL qui me ajoutera la colonne « valeur » de toutes les lignes. donc le résultat serait

sometext here and there. More Text Again 

aussi ce serait bien si je peux spécifier un séparateur.

+0

double possible de [concaténer des colonnes dans une liste séparées par des virgules] (http://stackoverflow.com/questions/1048209/concatenating-column-values-into-a -comma-separated-list). Avez-vous essayé de chercher? http://stackoverflow.com/search?q=concatenate%2Bcolumn – gbn

Répondre

0

Voici une fonction qui fait cela. Dans ce cas, le séparateur est ,:

CREATE FUNCTION AppendColumn (@ItemID int) 

    RETURNS varchar (8000) 
AS 
BEGIN 
    DECLARE @AppendedText varchar (8000) 
    SET  @AppendedText = NULL -- MUST be null to avoid leading comma. 

    SELECT 
     @AppendedText  = COALESCE (@AppendedText + ', ', '') + value 
    FROM 
     YourTable 
    WHERE 
     ... ... 
    ORDER BY 
     ... ... 

    RETURN @AppendedText 
END 
0

Vous pouvez tricher en utilisant FOR XML PATH si vous utilisez 2005+:

SELECT Value + ',' 
FROM table 
FOR XML PATH('') 
0

concaténer les valeurs ensemble dans une variable, l'ajout d'un séparateur, en utilisant une déclaration comme ceci:

SELECT @result = @result + t.Value + @separator 
FROM @test AS t; 

Comme un exemple complet:

--** Declare test table 
DECLARE @test TABLE (Name VARCHAR(20), Value VARCHAR(50)); 

--** Insert test data 
INSERT INTO @test (Name, Value) 
SELECT 'Ford', 'some text here and there.' UNION ALL 
SELECT 'Ford', 'More Text Again' 

--** Declare variables 
DECLARE @result VARCHAR(1000); 
DECLARE @separator VARCHAR(3); 

--** Set separator and initialize the result (important) 
SET @result = ''; 
SET @separator = ' | '; 

--** Concatente the values together separating them with @separator 
SELECT @result = @result + t.Value + @separator 
FROM @test AS t; 

--** Return the result removing the final separator 
SELECT LEFT(@result, LEN(@result)-1); 

Ceci utilise | comme séparateur et vous donnera:

some text here and there. | More Text Again 
Questions connexes