2010-07-30 4 views
4

quelqu'un Hope peut aider, je suis un hacker SQL noviceT-SQL - - concaténation chaîne

J'ai deux tables sur SQL Server 2005 TABLEAU 1 et TABLEAU 2:

TABLE1

COL1   COL2 
1   10 
2   20 
3   30 
4   10 
4   20 
5   20 
6   30 
7   10 
7   20 

TABLE2

COL1   COL2 
10   A 
20   B 
30   C 

COL2 dans TABLE2 est une représentation de caractères des données numériques dans COL2 TABLE1. J'espère que c'est compréhensible?

Je travaille comment sélectionner COL1 et COL2 de table1 et concaténer les résultats pour montrer ceci:

COL1   COL2Concat 
1   10 
2   20 
3   30 
4   10, 20 
5   20 
6   30 
7   10, 20, 30 

En utilisant ceci:

SELECT COL1, 
     STUFF((SELECT ',' + CAST(a.COL2 AS VARCHAR(255)) AS [text()] 
       FROM TABLE1 a 
       WHERE a.COL1 = b.COL1 
       ORDER BY a.COL2 
       FOR 
       XML PATH('') 
      ), 1, 1, '') AS COL2Concat 
FROM TABLE1 b 
GROUP BY COL1 
ORDER BY COL1 

Mais maintenant, je voudrais essayer de obtenir le même résultat, sauf utiliser les données dans COL2 TABLE2 ... soit:

COL1   COL2Concat 
1   A 
2   B 
3   C 
4   A, B 
5   B 
6   C 
7   A, B, C 

Toutes les idées - Je suis coincé pour être honnête comme je l'ai essayé de modifier la requête STUFF, mais il semble ne jamais sortir ... droit

+0

Vous voulez montrer A, B, C au lieu de 10, 20, 30? – LittleBobbyTables

+1

Vraisemblablement, vous avez essayé de simplement changer tous les 'TABLE1' dans votre requête à' TABLE2'. Je ne vois pas pourquoi cela ne fonctionne pas. Qu'est ce que tu obtiens? –

+0

Oui exactement .. les exemples sont simplistes, mais j'ai besoin de montrer A, B, C concaténés comme 10, 20, 30 ont été. – JamesH

Répondre

6

vous pouvez essayer ...

SELECT COL1, 
     STUFF((SELECT ',' + CAST((SELECT COL2 
             FROM TABLE2 
             WHERE TABLE2.COL1 = a.COL1) AS VARCHAR(255)) AS [text()] 
       FROM TABLE1 a 
       WHERE a.COL1 = b.COL1 
       ORDER BY a.COL2 
       FOR 
       XML PATH('') 
      ), 1, 1, '') AS COL2Concat 
FROM TABLE1 b 
GROUP BY COL1 
ORDER BY COL1 
+0

Brian - merci .. vous avez résolu en environ 1 minute ce qui m'a pris toute la journée à faire avec! Merci beaucoup. – JamesH

+0

Mon plaisir. Vous avez fait toutes les choses difficiles, et négligé le dernier petit peu. –

+0

C'était savoir que vous pouviez mettre une sous clause dans la partie CAST ... merci encore. – JamesH

Questions connexes