SQL Server:查询以逗号分隔的逗号

时间:2018-08-03 13:31:48

标签: sql sql-server

我有两个表,一个表用于国家(地区),另一个表用于城市,并且我想查询以国家/地区为单位的国家/地区,用逗号分隔所有城市。

注意:

  1. 第二个表从第一个表Fk_CountryId的主键开始是一个外键CityId,这是一个主键

  2. 我正在使用SQL Server

第一个表Country看起来像这样

CountryId | CountryName 
----------+-------------
    1     | USA 
    2     | UK
    3     | Germany

第二张表City看起来像这样

CityId | CityName   | Fk_CountryId
-------+------------+-------
1      | Los Angeles|   1
2      | Boston     |   1
3      | Cambridge  |   2
4      | Chester    |   2
5      | Berlin     |   3
6      | Hamburg    |   3

预期的数据集:

CountryId | CountryName  | CitiesNames
----------+--------------+----------------------
1         | USA          | Los Angeles, Boston
2         | UK           | Cambridge, Chester
3         | Germany      | Berlin, Hamburg

1 个答案:

答案 0 :(得分:0)

对于旧版本的SQL Server,我会在FOR XML中使用STUFF()子句:

SELECT c.CountryId, c.CountryName,
       STUFF( (SELECT DISTINCT ' ,'+ct.CityName   
               FROM City ct
               WHERE ct.CountryId = c.CountryId 
               FOR XML PATH ('')
              ), 1, 1, ''
            ) AS CitiesNames
FROM Country c;

您可以将STRING_AGG()用于更高版本(SQL Server 2017)。但是,如果您没有重复的城市,DISTINCTSTUFF()内部是多余的。因此,您可以将其删除。

为了获得更好的性能,您需要索引Country (CountryId)包括CountryNameCityName