SQLServer > 複数行をカンマ区切りで集約する

2016-11-29 14:06:42 (Tue);

複数行をカンマ区切りで集約する


テストデータ作成

DROP TABLE DATATBL
CREATE TABLE DATATBL(No INT, Area1 Varchar(100), Area2 Varchar(100))

INSERT INTO DATATBL
SELECT '1', '北海道'    ,'札幌市'   UNION ALL
SELECT '2', '北海道'    ,'函館市'   UNION ALL
SELECT '3', '神奈川県'  ,'横浜市'   UNION ALL
SELECT '4', '神奈川県'  ,'川崎市'   UNION ALL
SELECT '5', '神奈川県'  ,'三浦郡'   


SELECT * FROM DATATBL

No   Area1            Area2
---- ---------------- ---------
1    北海道           札幌市
2    北海道           函館市
3    神奈川県         横浜市
4    神奈川県         川崎市
5    神奈川県         三浦郡



サンプルSQL

SELECT
    No
    , Area1
    , Area2
    , STUFF((
        SELECT ',' + tbl2.Area2
        FROM   DATATBL tbl2
        WHERE  tbl1.Area1 =  tbl2.Area1
        ORDER BY tbl2.No desc 
        FOR XML PATH ('')), 1,1,'') AS csv_data
FROM
    DATATBL tbl1


No   Area1            Area2       csv_data
---- ---------------- ----------- ------------------------
1    北海道           札幌市      函館市,札幌市
2    北海道           函館市      函館市,札幌市
3    神奈川県         横浜市      三浦郡,川崎市,横浜市
4    神奈川県         川崎市      三浦郡,川崎市,横浜市
5    神奈川県         三浦郡      三浦郡,川崎市,横浜市


おまけ

Oracleでは LISTAGG関数 で可能。


最終更新:2016年11月29日 14:06