如何根据分组将字符串组合在一列中

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]

【讨论】:

以上是关于如何根据分组将字符串组合在一列中的主要内容,如果未能解决你的问题,请参考以下文章

根据一列中的字符串进行分组和排名

如何在一列中对数据进行分组?

将月份名称和年份组合在一列中

如何在一列中为不同的组合框设置不同的商店?

Power BI:将项目分组在一列中,具有不同值的其他列显示为几列

在一列中按多个值分组