2011-05-29 9 views
32

Duplicar posible:
Is there a way to create a SQL Server function to “join” multiple rows from a subquery into a single delimited field?¿Cuál es el equivalente de String.Join en TSQL?

Hola a todos!

Estoy buscando una manera fácil de concatenar 'n' valores. Algo así como:

SELECT MyConcat(',', T.TextColumn) 
FROM SomeTable AS T 
WHERE T.SomeOtherColumn = SomeCondition 

Así que si tengo una tabla como:

SomeTable: 
Id | TextColumn | SomeOtherColumn 
----+------------+---------------- 
1 | Qwerty  | Y 
2 | qwerty  | N 
3 | azerty  | N 
4 | Azerty  | Y 

El resultado sería algo como:

SQL: 
SELECT MyConcat(';', T.TextColumn) 
FROM SomeTable AS T 
WHERE T.SomeOtherColumn = 'Y' 

RESULT: 
'Qwerty;Azerty' 
+0

he encontrado una solución mediante la creación de la siguiente función: CREAR FUNCIÓN [dbo]. [JoinTexts] ( @deli inglete VARCHAR (20), @whereClause VARCHAR (1) ) RETURNS VARCHAR (MAX) AS COMENZAR DECLARE @Texts VARCHAR (MAX) SELECT @Texts = COALESCE (@Texts + @delimiter, '') + T.Texto DE alguna_tabla AS T DONDE T.SomeOtherColumn = @whereClause RETURN @Texts FIN IR Uso: dbo.JoinTexts SELECT ('' 'y') – Gil

Respuesta

36

Esto debe hacer el truco:

DECLARE @Result VARCHAR(MAX); 

SELECT 
    @Result = CASE 
     WHEN @Result IS NULL 
     THEN T.TextColumn 
     ELSE @Result + ';' + T.TextColumn 
    END 
FROM 
    SomeTable AS T 
WHERE 
    T.SomeOtherColumn = 'Y'; 

SELECT @Result 
25
SELECT CAST(TextColumn + ';' AS VARCHAR(MAX)) 
FROM SomeTable 
WHERE SomeOtherColumn = 'Y' 
FOR XML PATH ('') 

Si no te gusta el arrastre ; puede eliminar el carácter del resultado.


Editar en 2017

Muchas plataformas ahora son compatibles con la función de intervalo LISTAGG()

+0

funciona muy bien –

Cuestiones relacionadas