2012-02-27 3 views
1

J'ai supprimé mon autre message pour la même question et j'en ai reposé une nouvelle car l'autre question est confuse. Veuillez me pardonner pour le duplicata. En espérant que cette obtiendrait une certaine tractionCombiner les chaînes à partir de plusieurs lignes et les joindre à une autre table

Voici ma table A

Id Name 
1 Name1 
1 Name2 
2 Name3 
2 Name4 
2 Name5 

Table B: 
Id FileName 
1 file1 
2 File2 

J'ai besoin la sortie combinée avec table B comme

Id FileName Name 
1 file1 Name1,Name2 
2 file2 Name3,Name4,Name5 

J'ai essayé deux approches avec COALESE, ils travaillent stand- seul, mais seulement quand j'ai entré Id = <>.

Comment faire cela combiné avec deux tables?

S'il vous plaît laissez-moi savoir si je peux expliquer plus. Et je m'excuse pour mon dernier post.

+0

dépend de SGBDR que vous utilisez . –

+0

@Oleg: J'ai SQL Server 2008 R2 – user393148

Répondre

1
SELECT Id, FileName, 
(SELECT Name+',' FROM A WHERE A.Id = B.Id FOR XML PATH('')) Name 
FROM B 

Il est de votre responsabilité de dépouillent la virgule 8)

Conseil:

SELECT Id, FileName, 
STUFF((SELECT ','+Name FROM @A a WHERE A.Id = B.Id FOR XML PATH('')), 1, 1, '') Name 
FROM @B b 
+0

Merci beaucoup Oleg. Cela a aidé. On dirait que j'ai un long chemin à parcourir pour apprendre le SQL. – user393148

+0

Oh oui! 8-) Bonne chance –

1

les opérations suivantes:

SELECT a.id, b.FileName, 
    REPLACE(
    (SELECT distinct Name AS [data()] 
    FROM TableA a2 
    WHERE a.id=a2.id 
    ORDER BY a2.Name FOR XML PATH('')), 
    ' ', ', ') 
FROM TableB b inner join TableA a on a.id = b.id 
GROUP BY a.id, b.FileName; 
+0

Pourquoi avez-vous besoin de la jointure et des regroupements ici? –

+0

Sera mauvais si certaines chaînes de A contiennent des espaces ... –

Questions connexes