如何基于分组在一列中组合字符串

时间:2019-12-04 16:36:14

标签: sql

我有一张桌子有这样的数据 Table 1

并且想要将具有相同模板的作业合并到一栏中,像这样 Final Table

我尝试使用FOR XML PATH

选择t.JBTemplate,   东西(   (SELECT N','+来自Table1的合同FOR XML PATH(''),TYPE)   .value('text()1','nvarchar(max)'),1,2,N'')职位   从表1 t   按合同t.JBTemplate分组

但是,它结合了每个模板的所有作业。

Current query result

1 个答案:

答案 0 :(得分: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]