2009-10-25 8 views
7

je besoin d'une fonction similaire à Oracle WM_CONCAT dans SQL Server, qui retourne une liste séparée par des virgules de tout champ vous passez comme argument. Par exemple, dans Oracle,valeur du champ Concat à chaîne dans SQL Server

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

renvoie "John, Jim, Bob".

Comment puis-je faire dans SQL Server?

Merci

Répondre

0

afaik, vous devez le faire par vous-même.

Vous pouvez construire une fonction définie par l'utilisateur qui boucle avec un curseur les dossiers des employés où l'État est CA et renvoie la concaténation de leurs noms.

+0

Non, pas besoin d'utiliser un curseur du tout. – gbn

3

La réponse réelle:

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

Une question commune ici. Quelques recherches:

+3

À noter que ceci n'est valable que pour SQL Server 2005 et versions ultérieures. OP n'a pas indiqué quelle version de SQL Server ils utilisent. –

+1

Vous pouvez remplacer la sous-chaîne, avec la commande STUFF qui fonctionnera correctement sans avoir besoin de connaître la longueur de la chaîne. – WesleyJohnson

+1

J @ Chris: Je dirais que 2k5 SQL est une hypothèse raisonnable que 10 ans après SQL 2000 RTM et 2.5 versions ultérieures – gbn

2

Essayez ceci:


    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

essayer cette

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

Ce n'est pas correct. Cela ne fonctionne pas dans SQL Server, comme le PO l'a souligné. Vous pourriez vouloir le supprimer, ou le modifier si vous vouliez dire quelque chose de différent? – 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 

J'ai eu cette requête à partir de ce lien

Refer this Link for more Clarification

0

Dans SQL Server 2017 fonction STRING_AGG a été ajouté

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