mettre à jour un champ de table de database avec une list séparée par des virgules

J'ai deux tables nommées Dissortingcts et Schools . La table Dissortingcts contient une colonne nommée Schools .

J'ai besoin de remplir la colonne Schools de la table Dissortingcts de la table Schools correspondante, de sorte que chaque ligne de la table Dissortingcts dispose d'une list de valeurs séparées par des virgules des noms d' Schools table Schools .

Comment puis-je faire ceci? Dois-je utiliser une requête UPDATE ou une procédure stockée?

Je n'ai que jusqu'à:

SQL Fiddle

Dissortingcts Table

 +------------+------+---------+ | DissortingctId | Name | Schools | +------------+------+---------+ | 1 | a | | | 2 | b | | | 3 | c | | | 4 | d | | +------------+------+---------+ 

Schools Table

 +----------+------------+------------+ | SchoolId | SchoolName | DissortingctId | +----------+------------+------------+ | 1 | s1 | 1 | | 2 | s2 | 1 | | 3 | s3 | 2 | | 4 | s4 | 2 | | 5 | s5 | 4 | +----------+------------+------------+ 

Comment la sortie doit être

 +------------+------+---------+ | DissortingctId | Name | Schools | +------------+------+---------+ | 1 | a | s1,s2 | | 2 | b | s3,s4 | | 3 | c | | | 4 | d | s5 | +------------+------+---------+ 

Avec l'aide de FOR XML PATH et STUFF pour CONCATENER les valeurs, vous pouvez facilement mettre à jour la table Dissortingct avec le résultat souhaité.

 UPDATE a SET a.Schools = b.SchoolList FROM Dissortingcts a INNER JOIN ( SELECT DissortingctId, STUFF((SELECT ', ' + SchoolName FROM Schools WHERE DissortingctId = a.DissortingctId FOR XML PATH ('')) , 1, 1, '') AS SchoolList FROM Dissortingcts AS a GROUP BY DissortingctId ) b ON A.DissortingctId = b.DissortingctId WHERE b.SchoolList IS NOT NULL 
  • SQLFiddle Demo