2009-02-10 5 views
4

Existe-t-il une fonction de type Implode pour SQL Server?Fonction de type Implode dans SQL Server 2000?

Ce que j'ai une liste (dans une table de serveur SQL):

Apple 
Orange 
Pear 
Blueberry 

et je veux qu'ils sortent comme

Apple, Orange, Pear, Blueberry 

J'espère que pour l'espace et la virgule pour être configurable mais je peux toujours le remplacer si ce n'est pas ...

Une aide rapide serait appréciée!

Répondre

10

Il y a quelques questions à ce sujet déjà SO (recherche PIVOT ou UNPIVOT ou GROUP_CONCAT), mais une solution simple pour SQL Server (en utilisant un truc avec concaténation variable) pour votre problème déclaré:

DECLARE @str AS varchar(MAX) 
DECLARE @separator AS varchar(50) 
SET @separator = ', ' -- Here's your configurable version 

SELECT @str = COALESCE(@str + @separator, '') + <column_name> 
FROM <table_name> 
ORDER BY <sort_order> 

bien sûr, si cela est nécessaire sur une par ligne base, vous pouvez utiliser les fonctions UDF ou le really cool FOR XML truc

+0

Merci! Pardonnez moi pour ce double commentaire. Je ne savais pas quoi chercher sous .... –

+1

Je vais vous laisser un secret - vous êtes bien mieux de chercher sur Google restreindre à ce site. http://www.google.com/search?q=site:stackoverflow.com+concatenate+sqlserver –

+0

Merci Cade, je vais essayer ça la prochaine fois ... –

2

J'utilise généralement le FOR XML méthode PATH pour cela, il travaille pour les sous-requêtes de ligne ainsi, simplement

SELECT ', ' + <column_name> 
FROM <table_name> 
ORDER BY <sort_order> 
FOR XML PATH('') 

Cela vous donnera votre liste avec un « » au début, et le meilleur moyen de supprimer cette
est d'utiliser des trucs

SELECT STUFF((
     SELECT ', ' + <column_name> 
     FROM <table_name> 
     ORDER BY <sort_order> 
     FOR XML PATH('') 
    ),1,2,'') 
+1

Je ne pense pas que cela fonctionnera pour SQL Server 2000. Vous auriez probablement besoin de 2005 ou 2008 pour que cela fonctionne ... –

Questions connexes