SQL select -one to many join想拥有manys

时间:2013-08-15 14:21:38

标签: sql sql-server join

我有两个表,TBL_PARENT(parentID,ParentName)和TBL_CHILDREN(ParentID,Child_Name) 父母可以有0到多个孩子

我想要的是一个查询,以便为每个父母单行提供一个父母及其子女的列表。

例如

Parent1 John,Mary

Parent2 jane,steve,jana

并且行数为父项总数

3 个答案:

答案 0 :(得分:2)

以下是您需要的答案。这不是问题的公认答案,但这是正确的答案。

https://stackoverflow.com/a/177153/2324286

答案 1 :(得分:0)

SELECT COUNT(P.parentID),
P.ParentName, 
C.Child_Name 
FROM TBL_PARENT as P
INNER JOIN TBL_CHILDREN as C  
WHERE P.parentID == c.ParentID
GROUP BY P.ParentName;

P.parentID == c.ParentID 行正在进行加入,计数行(P.parentID)正在计算所有父项和 GROUP BY P.ParentName 这一行按照父级的名称对所有行进行分组,以便您可以显示每个父级的所有子级。

答案 2 :(得分:0)

尝试此查询: 我创建了3个表2已经在您的数据库#parant,#ch上创建了 第三个是将结果放入的临时表。

create table #parant (id int , name varchar(10))
create table #ch (id int , name varchar(10), pid int)

insert into #parant select 1,'PA'
insert into #parant select 2,'PB'
insert into #parant select 3,'PC'

insert into #ch select 1,'Ca',1
insert into #ch select 1,'Cb',1
insert into #ch select 1,'Cc',1
insert into #ch select 1,'Cd',3
insert into #ch select 1,'Cf',3
insert into #ch select 1,'Ch',1




create table #testTable (id int, name varchar(10),chid int, chname varchar(10), cpid int)

insert into #testTable 
select x.id , x.name ,isnull( y.id ,0), isnull(y.name,'') ,isnull(y.pid ,0)
from #parant as x
left outer join #ch as y
on x .id = y .pid 

SELECT t.ID, t.name , STUFF(
(SELECT ',' + s.chname
FROM #TestTable s
WHERE s.ID = t.ID
FOR XML PATH('')),1,1,'') AS CSV
FROM #TestTable AS t
GROUP BY t.ID, t.name
GO


drop table #testTable 
drop table #ch 
drop table #parant 

对于上述数据我得到了以下结果

1 PA Ca,Cb,Cc,Ch 2 PB
3 PC Cd,Cf