【问题标题】:Child data field aggregated into one comma separated field子数据字段聚合到一个逗号分隔字段中
【发布时间】:2011-02-02 05:37:04
【问题描述】:

我正在使用 SQL Server 2008 R2

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

因此,如果父表称为 Person 并具有 ID 字段、FirstName 和 LastName,而子表称为 Kids 并具有 ID 字段、ParentID 字段(父表的 FK)、FirstName 和 LastName...I想返回一个类似这样的数据集:

父母名字 = 迈克
ParentLastName = 戴维斯
KidsFirstNames = Suzy、David、Alex

我认为有一种方法可以使用 For XML 路径执行此操作,但我不记得语法了。

提前致谢。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    看看这个例子

    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)') 你能解释一下那里发生了什么吗?再次感谢...这太棒了!
    猜你喜欢
    • 2011-11-14
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    相关资源
    最近更新 更多