将多行合并为一行并组合列SQL

use*_*497 8 sql t-sql sql-server sql-server-2008

我试图让这个视图查询两个表,然后将每个程序ID汇总到一行,其中AttributeNames列中的所有AttributeNames一起

我加入了这两个表,它提取了适当数量的记录.
现在,我需要的部分就是将每个ProgramID和一个所有AttributeNames一起放在每个id的AttributeNames列中.

示例:全部在一行中.

ProgramID      | AttributeNames
887            | Studydesign, Control Groups, Primary Outcomes.
Run Code Online (Sandbox Code Playgroud)

这是我需要修改的SQL VIEW的图像,所以它执行此操作: 在此输入图像描述

查询:

SELECT TOP (100) PERCENT dbo.tblProgramAttributes.ProgramID,
       dbo.tblProgramAttributes.AttributeID AS PAattributeID, 
       dbo.tblAttributes.AttributeID, 
       dbo.tblAttributes.AttributeName
FROM   dbo.tblProgramAttributes INNER JOIN
       dbo.tblAttributes 
ON     dbo.tblProgramAttributes.AttributeID = dbo.tblAttributes.AttributeID
WHERE (dbo.tblProgramAttributes.AttributeID NOT LIKE '%ProgramType%')
ORDER BY dbo.tblProgramAttributes.ProgramID DESC
Run Code Online (Sandbox Code Playgroud)

paq*_*mez 13

select ProgramId,
stuff(
(
    select ','+ [attributename]
    from Table1 
    where programid = t.programid for XML path('')

),1,1,'') as AttributeNames
from (select distinct programid 
      from Table1 )t
Run Code Online (Sandbox Code Playgroud)

看看我的sql小提琴

结果

PROGRAMID   ATTRIBUTENAMES
887         Study Design,Control Groups,Primary Outcomes
Run Code Online (Sandbox Code Playgroud)