如何根据分组将字符串组合在一列中
Posted
技术标签:
【中文标题】如何根据分组将字符串组合在一列中【英文标题】:How to combine string in one column based on grouping 【发布时间】:2019-12-04 16:36:14 【问题描述】:我有一张表有这样的数据
并且想将具有相同模板的作业合并在一列中,像这样
我尝试使用 FOR XML PATH
选择 t.JBTemplate, 东西( (SELECT N', ' + Contract FROM Table1 FOR XML PATH(''),TYPE) .value('text()1','nvarchar(max)'),1,2,N'') 工作 从表 1 t 按 t.JBTemplate、合同分组
但是,它结合了每个模板的所有作业。
【问题讨论】:
您可以在 SO 上找到很多类似的问题,也可以使用STRING_AGG() 谢谢,我在发帖前搜索过,但找不到类似的东西 【参考方案1】:请试试这个:
IF (OBJECT_ID('tempdb..#my_job_template') IS NOT NULL)
BEGIN
DROP TABLE #my_job_template
END;
CREATE TABLE #my_job_template (JCCO INT NOT NULL, [Contract] nvarchar(max) NULL, [JBTemplate] nvarchar(max) NULL);
INSERT INTO #my_job_template(JCCO, [JBTemplate], [Contract])
VALUES (17, 'Ascend AL', '601226.17')
,(17, '1192-10803', '601236.17')
,(17, 'P66_4Sites', '600948.17')
,(17, 'P66_4Sites', '601219.17')
,(17, 'P66_4Sites', '601234.17')
--select * from #my_job_template
SELECT [JCCO]
, [JBTemplate]
,STUFF((SELECT ', ' + CAST([Contract] AS VARCHAR(MAX)) [text()]
FROM #my_job_template
WHERE [JBTemplate] = t.[JBTemplate]
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,2,' ') [Contract]
FROM #my_job_template t
GROUP BY [JBTemplate] , [JCCO]
【讨论】:
以上是关于如何根据分组将字符串组合在一列中的主要内容,如果未能解决你的问题,请参考以下文章