2012-06-03 43 views
5

Duplicar posible:
Concatenate many rows into a single text string?seleccionar varias filas SQL en una fila

Supongamos que tengo tabla denominada tblContractMail. tabla de ejemplo con datos dados a continuación:

enter image description here

Tengo que escribir una consulta SQL que produce el siguiente resultado:

'[email protected]; [email protected]; HJK @ akij.net'

conozco a dos posibilidades:

DECLARE @str varchar(4000) 
SELECT @str = COALESCE(@str + ';', '') + strContract FROM tblContractMail 
SELECT @str 

e:

DECLARE @str varchar(4000) 
SET @str = (SELECT strContract + ';' FROM tblContractMail FOR XML PATH('')) 
SET @str = SUBSTRING(@str, 1, LEN(@str)-1) 
SELECT @str 

¿Hay alguna manera de obtener esta salida en una sola consulta (me refiero a cabo con declarar cualquier variable)?

+0

Consulte esto. http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string –

+0

Sí, esta pregunta se ha duplicado en innumerables ocasiones. –

+0

@PeterMajeed: Es cierto, aunque nunca se ha preguntado en esta forma particular. –

Respuesta

5

El primer método se basa en la variable, por lo que la respuesta es no para la primera.

Pero se puede utilizar fácilmente el segundo enfoque, sin una variable, sólo se necesita modificar ligeramente:

SELECT 
    SUBSTRING(
    (SELECT ';' + strContract FROM tblContractMail FOR XML PATH('')), 
    2, 
    2147483647 
) 

Como se puede ver, el separador va antes de la partida. Como resultado, comienza a cortar la cadena del segundo carácter, omitiendo el punto y coma inicial. El especificador de longitud no tiene que ser precisamente la longitud menos uno, puede especificar cualquier número bastante grande, y la función devolverá todo, desde el segundo carácter hasta el final. En este caso, se ha especificado el valor máximo de int.

+0

Hola @Andriy gracias – yeasir007

Cuestiones relacionadas