8
votes

Valeur de champ Concat à la chaîne de SQL Server

J'ai besoin d'une fonction similaire à Oracle wm_concat code> dans SQL Server, qui renvoie une liste séparée par des virgules de tout champ que vous transmettez comme argument. Par exemple, dans Oracle,

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


0 commentaires

6 Réponses :


0
votes

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

Vous pouvez créer une fonction définie par l'utilisateur qui boucle avec un curseur les enregistrements de l'employé où l'état est ca et renvoie la concaténation de leurs noms.


1 commentaires

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



3
votes

La réponse réelle: xxx

une question commune ici. Quelques recherches:


4 commentaires

Vaut la peine de noter que cela n'est valable que pour SQL Server 2005 et ultérieurement. OP n'a pas indiqué la version de SQL Server qu'ils utilisent.


Vous pouvez remplacer la sous-chaîne avec la commande Stuff qui fonctionnera correctement sans avoir à connaître la longueur de la chaîne.


@Chris J: Je dirais que SQL 2K5 est une hypothèse raisonnable que 10 ans après SQL 2000 RTM et 2,5 versions plus tard


2147483647 Est-ce que votre ami ... Mémorisez-le.



2
votes

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


0 commentaires

-3
votes

Essayez ceci xxx


1 commentaires

Ce n'est pas correct. Cela ne fonctionne pas dans SQL Server, car l'OP a souligné. Vous voudrez peut-être le supprimer ou le modifier si vous vouliez dire quelque chose de différent?



0
votes
 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
I got this Query from this LinkRefer this Link for more Clarification

0 commentaires

4
votes

dans SQL Server 2017 String_Agg Fonction 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;


0 commentaires