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