2009-10-25 18 views
7

Necesito una función similar a Oracle WM_CONCAT en SQL Server, que devuelve una lista separada por comas de cualquier campo que pase como argumento. Por ejemplo, en Oracle,Valor de campo de Concat a cadena en SQL Server

select WM_CONCAT(first_name) from employee where state='CA' 

devuelve "John, Jim, Bob".

¿Cómo puedo hacer esto en SQL Server?

Gracias

Respuesta

0

yo sepa, tiene que hacerlo por ti mismo.

Puede crear una función definida por el usuario que buclee con un cursor los registros de Employee donde el estado es CA y devuelve la concatenación de sus nombres.

+0

No, no hay necesidad de utilizar un cursor en absoluto. – gbn

3

La respuesta real:

SELECT 
    SUBSTRING(buzz, 2, 2000000000) 
FROM 
    (
    SELECT 
     firstname 
    FROM 
     employee 
    WHERE 
     State = 'CA' 
    FOR XML PATH (',') 
    ) fizz(buzz) 

Una pregunta común aquí. Algunas búsquedas:

+3

Merece la pena señalar que esto solo es válido para SQL Server 2005 y versiones posteriores. OP no ha especificado qué versión de SQL Server están utilizando. –

+1

Puede reemplazar SUBSTRING, con el comando STUFF que funcionará correctamente sin necesidad de conocer la longitud de la cadena. – WesleyJohnson

+1

@Chris J: Diría que SQL 2k5 es una suposición razonable de que 10 años después de SQL 2000 RTM y 2.5 versiones posteriores – gbn

2

Prueba esto:


    drop table #mike_temp 
go 

select * into #mike_temp 
    from (select 'Ken' as firstname, 'CO' as state 
     union all 
     select 'Mike' as firstname, 'CO' as state 
     union all 
     select 'Tom' as firstname , 'WY' as state 
     ) a 
go 

SELECT distinct 
     state 
     ,STUFF((SELECT ', ' + b.firstname FROM #mike_temp b where a.state = b.state FOR XML PATH('')),1, 2, '') AS CSVColumn 
    from #mike_temp a 
-3

probar esto

select  
    wm_concat(name) 
from 
    employee 
where 
    state='CA' 
group by 
    state 
+0

Esto no es correcto. No funciona en SQL Server, como señaló OP. Es posible que desee eliminarlo o editarlo si quería decir algo diferente. – criticalfix

0
SELECT Field1, Substring(Field2, 2, LEN(Field2)) AS Field2 FROM 
(
    SELECT 
     [InnerData].Field1, 
     (SELECT ',' + Field2 FROM @Fields WHERE Field1=[InnerData].Field1 FOR XML PATH('')) AS Field2 
     FROM 
     (
      SELECT DISTINCT Field1 FROM @Fields 
     ) AS [InnerData] 
) AS OuterData 

que tiene esta consulta desde este enlace

Refer this Link for more Clarification

0

En SQL Server 2017 STRING_AGG función se ha agregado

SELECT t.name as TableName 
     ,STRING_AGG(c.name, ';') AS FieldList 
    FROM sys.tables t 
    JOIN sys.columns c 
    ON t.object_id = c.object_id 
    GROUP BY t.name; 
Cuestiones relacionadas