2010-10-27 4 views
1

Je courais simple statment ci-dessous qui donne la sortie comme suit:Utiliser SQL au lieu de Supprimer et Fin du clavier

select '''' + name + '''' + ',' as Emp_Names from dbo.employee

Emp_Names 
'Jason', 
'Robert', 
'Celia', 
'Linda', 
'David', 
'James', 
'Alison', 
'Chris', 
'Mary', 

Est-il possible dans SQL qui peut montrer ma sortie désirée comme:

Emp_Names 
'Jason', 'Robert','Celia','Linda','David','James','Alison','Chris','Mary',

je peux appuyer sur un Supprimer et ensemble pour mettre fin à y arriver, mais seulement pour les dossiers de poignée, mais pas pour une centaine de dossiers ...

Merci à tous!

J'utilise SQL Server 2005 +

+1

Quelle est la différence entre les deux sorties? –

+0

Question éditée pour montrer ce que je comprends être la différence entre les deux formats. –

Répondre

1

Vous devez indiquer quelle implémentation SQL ou d'un produit que vous utilisez.

Si vous travaillez avec MySQL, vous recherchez la fonction d'agrégation GROUP_CONCAT.

Si vous travaillez dans R: Base, vous recherchez la fonction agrégat LISTOF.

2

Oui mais cela dépend de la base de données que vous utilisez?

Dans SQL Server 2005 ou version ultérieure, vous pouvez utiliser la fonction stuff si vous souhaitez que tous les noms soient dans une colonne.

SELECT STUFF ((SELECT DISTINCT TOP 100 POUR CENT '' + Nom FROM employee ORDER BY '' + Nom POUR XML PATH ('') ), 1, 1, '') ou

select STUFF ((SELECT DISTINCT TOP 100 POUR CENT '' ' ''' + Nom FROM employee ORDER BY '' ' ''' + Nom POUR XML PATH ('') ), 1 , 2, '') + '' ''
Sinon, vous pourriez utilisez la commande pivot pour avoir chaque nom comme sa propre colonne. La seule chose à utiliser avec la commande pivot est que vous devez connaître les noms avant la main, sinon vous l'utiliserez en conjonction avec la fonction stuff.

+0

Merci, Clyc !!! Ça marche. – Chris

+0

Je me demande quelle est la syntaxe pour Oracle, Clyc? – Chris

+0

@Chris: Voir [ce lien pour différentes façons de créer une liste séparée par des virgules dans Oracle] (http://www.oracle-base.com/articles/10g/StringAggregationTechniques.php) –

0

Ici, vous pouvez voir comment implémenter l'équivalent de GROUP_CONCAT() de MySQL (qui semble être ce dont vous avez besoin) sur SQL Server.

http://explainextended.com/2010/06/21/group_concat-in-sql-server/

Il concaténer les résultats de chaque groupe dans une seule chaîne séparée par des virgules. Pour ce cas d'utilisation, votre requête finira par être beaucoup plus simple que l'exemple, principalement parce que vous n'avez pas besoin de grouper.

+0

Merci, V! Apprenez-le. – Chris

0

Gads, group_concat-in-sql-server est certainement plus difficile que la façon dont je le ferais:

1> select sum(ID), count(*) from #b 
2> go 

----------- ----------- 
      41   7 

1> declare @i varchar(60) 
    select @i = coalesce(@i, '') + ltrim(str(ID)) + ', ' 
    from #b 
    select @i 
2> go 

------------------------------------------------------------ 
2, 3, 4, 6, 7, 8, 11,          

crédit supplémentaire pour perdre la virgule finale ....

Questions connexes