汇总函数会附加每个组的列值?

时间:2018-07-11 08:52:22

标签: sql sql-server tsql

我有一个与此类似的表格:

Id     Name    CommitDate  Commits
------ ------- ----------- --------
1      Ahmed   2018-07-05  2
1      Ahmed   2018-07-07  6

我需要以下输出:

Id     Name    Summary
------ ------- -------------------------------------------------
1      Ahmed   2 commits on 2018-07-05\n 6 commits on 2018-07-07

实际上,我在这里停下了脚步:

SELECT Id, Name, '' AS Summary  FROM Commits
GROUP BY Id, Name

并且无法继续,因为我之前使用的每个GROUP BY子句都带有一个简单的聚合函数,所以我无法弄清楚是否有一个聚合函数可以将分组的列附加在一起!

1 个答案:

答案 0 :(得分:0)

在SQL Server 2017或更高版本中,您可以使用string_agg

select  id
,       name
,       string_agg(cast(commits as nvarchar(5)) + ' commits on ' + 
                   convert(nvarchar(10), commitdate, 120), char(10)) + char(10)
from    commits
group by
        id
,       name

您可以在SQL Server中表示换行符,例如char(10),也可以在换行符加换行符之间表示char(13) + char(10)120样式convertsdatetimeyyyy-mm-dd格式。

Working example on SQL Fiddle.