获取一列的子记录

时间:2012-05-04 09:43:36

标签: sql sql-server sql-server-2005

我有一个表父和一个像这样的表子:

Parent
ID   Name
1    Parent1
2    Parent2

Son
ID   ParentID
10      1
20      1
30      1
15      2
25      2

最简单的方法是,在选择父级时,获取单个列中所有儿子的ID?像这样:

Result:
ID   Name      AllMySons
1    Parent1   10,20,30
2    Parent2   15, 25

我想构建一个函数来生成带有儿子的字符串,但有没有人有更好的想法?

2 个答案:

答案 0 :(得分:3)

select P.ID,
       P.Name,
       stuff((select ','+cast(S.ID as varchar(10))
              from Son S
              where S.ParentID = P.ID
              for xml path('')), 1, 1, '') AllMySons
from Parent P

SE-Data

答案 1 :(得分:1)

这个怎么样。

SELECT p1.id,
       p1.name,
       AllMySons = Replace ((SELECT s.id AS 'data()'
                             FROM   son s
                             WHERE  p1.id = s.parentid
                             FOR xml path('')), ' ', ', ')
FROM   parent p1
GROUP  BY p1.id,
          p1.name;