繁体   English   中英

如何连接分组行的所有列数据?

[英]how to concat all column data of a grouped row?

鉴于下表:

+--------------------+-----------+
|       Account      |  Company  |
+--------------------+-----------+
| gloria.harding     | FB        |
| gloria.harding     | Twitter   |
| bryant.schuman     | Google    |
| jerry.maxwell      | Apple     |
| rachel.heptinstall | FB        |
| rachel.heptinstall | Twitter   |
| rachel.heptinstall | Instagram |
+--------------------+-----------+

我想按Account对结果进行分组,但我需要将组中每一行的Company列连接起来,并将它们全部显示在一个匿名列中,如下所示:

+--------------------+------------------------+
|       Account      |      'Companies'       |
+--------------------+------------------------+
| gloria.harding     | FB, Twitter            |
| bryant.schuman     | Google                 |
| jerry.maxwell      | Apple                  |
| rachel.heptinstall | FB, Twitter, Instagram |
+--------------------+------------------------+

这可以在 TSQL 上实现吗?

第一个要求可以通过对Account列进行分组来轻松实现,但我不知道如何实现后者。

您可以使用以下内容 - 使用stuff()

select distinct Account,
STUFF((Select ','+Company
from tablename T1
where T1.account=T2.account
FOR XML PATH('')),1,1,'') from tablename T2

对于使用 SQL Server 2017 及更高版本的人来说,有一个比使用 XML 更简单的解决方案。 Microsoft 引入了STRING_AGG命令,这完全符合您的要求。

SELECT DISTINCT Account, (SELECT STRING_AGG(Company, ',')
                          FROM TableName T1
                          WHERE T1.Account = T2.Account) 
FROM TableName T2;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM