逗号使用SQL Query分隔值

InT*_*ons 15 sql sql-server sql-server-2008

我的SQL表如下

City_Code     Post_Code    Post_Code_Description
100           A1           ABC
100           C8           XYZ
100           Z3           MNO
200           D4           LMN
300           E3           IJK
300           B9           RST
Run Code Online (Sandbox Code Playgroud)

它是city_code和Post_Code之间的映射.一个City_Code有很多邮政编码.现在我想运行一个Query来获得类似的内容

City_Code     Post_Code    Post_Code_Description
100           A1,C8,Z3     ABC,XYZ,MNO
200           D4           LMN
300           E3,B9        IJK,RST
Run Code Online (Sandbox Code Playgroud)

你可以帮我解决一下这个SQL表如下

Joe*_*eph 24

试试这个:

SELECT City_Code, 
      Post_Code = 
        STUFF((SELECT ', ' + Post_Code
           FROM your_table b 
           WHERE b.City_Code = a.City_Code 
          FOR XML PATH('')), 1, 2, ''),
      Post_Code_Description=
        STUFF((SELECT ', ' + Post_Code_Description
           FROM your_table b 
           WHERE b.City_Code = a.City_Code 
          FOR XML PATH('')), 1, 2, '')
FROM your_table a
GROUP BY City_Code
Run Code Online (Sandbox Code Playgroud)


Tar*_*ryn 9

如果您使用的是MySQL,则可以使用 GROUP_CONCAT()

select City_Code, 
     GROUP_CONCAT(Post_Code) Post_Code, 
     GROUP_CONCAT(Post_Code_Description) post_code_description
from yourtable
group by City_Code
Run Code Online (Sandbox Code Playgroud)

对于SQL Server,您可以使用STUFF()FOR XML PATH()

select city_code,
    Stuff((SELECT ', ' + post_code 
            FROM yourtable t2
            where t1.city_code = t2.city_code
            FOR XML path('')),1,1,'') Post_Code,
    Stuff((SELECT ', ' + post_code_description
            FROM yourtable t2
            where t1.city_code = t2.city_code
            FOR XML path('')),1,1,'') post_code_description
from yourtable t1
group by city_code
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的是,对于SQL Server,你可以使用`STUFF`.完成所有工作的是"XML PATH".`STUFF`最后只是潜入并删除了剩余的逗号. (3认同)