Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 子数据字段聚合为一个逗号分隔的字段_Sql_Sql Server - Fatal编程技术网

Sql 子数据字段聚合为一个逗号分隔的字段

Sql 子数据字段聚合为一个逗号分隔的字段,sql,sql-server,Sql,Sql Server,我在SQL Server 2008 R2中工作 我有一个父表和一个子表(一对多关系)。我想做的是查询父表,但也包括子表中聚合为逗号分隔字符串的字段 因此,如果父表名为Person,带有ID字段、FirstName和LastName,子表名为Kids,带有ID字段、ParentID字段(父表的FK)、FirstName和LastName…我想返回一个类似于以下内容的数据集: ParentFirstName=Mike ParentLastName=Davis KidsFirstNames=苏西、

我在SQL Server 2008 R2中工作

我有一个父表和一个子表(一对多关系)。我想做的是查询父表,但也包括子表中聚合为逗号分隔字符串的字段

因此,如果父表名为Person,带有ID字段、FirstName和LastName,子表名为Kids,带有ID字段、ParentID字段(父表的FK)、FirstName和LastName…我想返回一个类似于以下内容的数据集:

ParentFirstName=Mike
ParentLastName=Davis
KidsFirstNames=苏西、大卫、亚历克斯

我认为有一种方法可以通过For XML路径实现这一点,但我记不起语法


提前感谢。

看看这个例子

declare @YourTable table (BirthDay datetime, PersonName varchar(20)) 
insert into @YourTable VALUES ('1-10-2010',     'Joe'  ) 
insert into @YourTable VALUES ('2-10-2010',     'Bob'  ) 
insert into @YourTable VALUES ('2-10-2010',     'Alice') 



SELECT 
    p1.BirthDay 
        ,STUFF( 
                   (SELECT 
                        ', ' + p2.PersonName 
                        FROM @YourTable p2 
                        WHERE p2.BirthDay=p1.BirthDay 
                        ORDER BY p2.PersonName 
                        FOR XML PATH(''), TYPE 
                   ).value('.','varchar(max)') 
                   ,1,2, '' 
              ) AS PersonNames 
    FROM @YourTable p1 
    GROUP BY p1.BirthDay

谢谢你的解决方案,阿斯坦德。除了以下部分外,我了解所有正在进行的事情:TYPE).value('.',varchar(max)')你能解释一下那里发生了什么吗?再次感谢……这太棒了!