5

と という名前の 2 つのテーブルがDistrictsありSchoolsます。テーブルには、 という名前のDistricts列が含まれていますSchools

テーブルの各行に、テーブルの学校名の値のコンマ区切りリストが含まれるように、対応するテーブルからテーブルのSchools列を作成する必要があります。DistrictsSchoolsDistrictsSchools

これどうやってするの?UPDATEクエリまたはストアド プロシージャを使用する必要がありますか?

私は次のようになりました:

SQL フィドル

Districts Table

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

Schools Table

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

どのように出力する必要があるか

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

1 に答える 1

6

FOR XML PATHおよびSTUFFを使用して値を CONCATENATE すると、目的の結果でテーブルを簡単に更新できますDistrict

UPDATE  a
SET     a.Schools = b.SchoolList
FROM    Districts a
        INNER JOIN
        (
            SELECT  DistrictId,
                    STUFF((SELECT ', ' + SchoolName
                            FROM Schools
                            WHERE DistrictId = a.DistrictId
                            FOR XML PATH (''))
                        , 1, 1, '')  AS SchoolList
            FROM    Districts AS a
            GROUP   BY DistrictId
        ) b ON A.DistrictId = b.DistrictId
WHERE   b.SchoolList IS NOT NULL
于 2013-03-20T13:12:56.023 に答える