2010-11-11 9 views
3

Ma table a la structure suivantevaleurs Comparaison d'une table sans utiliser CURSORS

ID MName FName 
1 Sunil Sachin 
2 Sunil Sanjay 
3 Sunil Wasim 
4 Greg Ricky 
5 Ian Mark 

Je veux la requête pour retourner

1 Sunil Sachin, Sanjay, Wasim 
2 Sunil Sachin, Sanjay, Wasim 
3 Sunil Sachin, Sanjay, Wasim 
4 Greg Ricky 
5 Ian Mark 
+1

Pourquoi avez-vous besoin d'un curseur en premier lieu? – leppie

+1

Pourquoi répéter la première rangée trois fois? –

+0

Ceci est un exemple de données. –

Répondre

1

Vous pouvez utiliser this method faire un 'group_concat' et obtenir le résultats que vous voulez:

with Data(ID, MName, FName) as 
(
    select 1, 'Sunil', 'Sachin' 
    union 
    select 2, 'Sunil', 'Sanjay' 
    union 
    select 3, 'Sunil', 'Wasim' 
    union 
    select 4, 'Greg', 'Ricky' 
    union 
    select 5, 'Ian', 'Mark' 
) 
select Data.ID, Data.MName, Names.FNames 
from Data 
    join 
    (
     select MName, left(names, len(names) - 1) as FNames 
     from Data as extern 
      cross apply (select FName + ', ' 
         from Data as intern 
         where extern.MName = intern.MName 
         for xml path('') 
         ) pre_trimmed (names) 
     group by MName, names 
    ) Names ON Data.MName = Names.MName 
order by Data.ID 
+1

Merci. Ça marche. Aussi http://explainextended.com/2010/06/21/group_concat-in-sql-server/ est un très bon lien. –

+0

@ user504351, vous pouvez accepter la réponse en cliquant sur la coche en creux à côté d'elle. Cela le rend vert et le marque comme accepté. Et merci pour le lien dans votre commentaire, cela semble intéressant. –

+0

Salut, j'ai une question. Que fait pre_trimmed (noms)? J'ai utilisé n'importe quelle autre corde et ça marche aussi. –