获取子计数和其下的记录列表

时间:2015-11-03 12:22:24

标签: sql sql-server sql-server-2008

我有两个表,如下所示。

declare @Table1 table ( ID int, ColName varchar(20), ParentID int)

insert into @Table1
select 1,'Rec1',-1
union
select 2,'Rec2',1
union
select 3,'Rec3',1
union
select 4,'Rec4',2


declare @Table2 table ( ColID int, Name varchar(10),ID int)

insert into @Table2
select 10,'asdf',1
union
select 20,'atsdf',2
union
select 30,'asurdf',3
union
select 40,'ahfsdf',4
union
select 50,'aesdf',2
union
select 60,'asdsfgf',1
union
select 70,'asdfdf',3

我希望显示最高级别的父级计数以及父级和子级计数等相关记录。 第二个表数据应该位于第一个表的父ID,下一个Child来自First表,子计数和第二个表记录,第三个子,Child的计数和来自第二个表的相关记录。

ID Name     Count

1   Rec1    6
10  asdf    NULL
20  atsdf   NULL
2   Rec2    3
50  aesdf   NULL
60  asdsfgf NULL

1 个答案:

答案 0 :(得分:-1)

SELECT id,colname,cnt FROM (
SELECT tab1.id,
    tab1.colname,
    COUNT (*) cnt,
    tab1.id sortorder
FROM @Table1 tab1 INNER JOIN @Table2 tab2 ON tab1.id = tab2.id
GROUP BY tab1.id, tab1.colname
UNION ALL
    SELECT colid,
    name,
    NULL,
    id
FROM @Table2
) sub
ORDER BY sortorder, id