2012-04-04 3 views
0

J'ai une exigence dans laquelle la structure de la table je ressemblelignes à séparées par des virgules liste dans SQL

ID     Owner Id    NAME 
1     20      Name 1 
1     21      Name 2 
1     34      Name 3 
2     10      Name 4 
2     12      Name 5 
3     100      Name 6 

je besoin d'une requête qui me donnerait les résultats que

ID    Owner ID    Name 
1     20      Name 1, Name2, Name 3 
2     10      Name4, Name5 
3     100     Name 6 

Actuellement nous ceci sur le codebehind, mais je voudrais idéalement faire cela via SQL et voir si cela équivaut à une amélioration des performances.

+1

Comment décidez-vous qui 'propriétaire Id' montrer? – RedFilter

+4

Vous devrez spécifier la base de données pour cette question. Il n'y a pas de solution générique –

+0

@RedFilter ressemble à juste le 'min'. –

Répondre

1

Vous n'avez pas mentionné votre SGBD Je suppose donc que PostgreSQL:

SELECT id, 
     min(owner_id) as lowest_id, 
     string_agg(name, ', ') as name_list 
FROM the_table 
GROUP BY id 
+0

Son premier identifiant de propriétaire et le SGBD est SQL. – Vish

+0

Désolé les gars ont oublié de mentionner que je ne peux pas utiliser min ici. Les identifiants Darn DB sont des chaînes et c'est quelque chose comme 'TNX-0000-CFT-0001'. Cela m'irrite quand la clé primaire est une chaîne, mais c'est comme ça que le système fonctionne depuis 10 ans. – Vish

+4

@ user1313368: "SQL" n'est pas un SGBD, c'est un langage. Et 'min()' * peut * être utilisé sur une valeur de chaîne. –

Questions connexes