日期:2014-05-18 浏览次数:20636 次
/*
标题:SER SERVER 2005中统计各节点及其子节点的数量及合计(逐级汇总)
作者:爱新觉罗·毓华(十八年风雨,守得冰山雪莲花开)
时间:2011-05-06
地点:重庆航天职业学院
id pid name cnt
---- ---- ---------- -----------
001 NULL 广东省 0
002 001 广州市 0
003 001 深圳市 0
004 002 天河区 0
005 003 罗湖区 0
006 003 福田区 0
007 003 宝安区 0
008 007 西乡镇 1
009 007 龙华镇 2
010 007 松岗镇 3
011 006 岗下镇 4
012 005 上沙镇 5
013 004 天河镇 6
-->统计结果如下:
id name unit sum_cnt
---- ---------- ----------- -----------
001 广东省 13 21
002 广州市 3 6
003 深圳市 9 15
004 天河区 2 6
005 罗湖区 2 5
006 福田区 2 4
007 宝安区 4 6
008 西乡镇 1 1
009 龙华镇 1 2
010 松岗镇 1 3
011 岗下镇 1 4
012 上沙镇 1 5
013 天河镇 1 6
*/
create table tb(id varchar(3) , pid varchar(3) , name nvarchar(10) , cnt int)
insert into tb values('001' , null , N'广东省' , 0)
insert into tb values('002' , '001' , N'广州市' , 0)
insert into tb values('003' , '001' , N'深圳市' , 0)
insert into tb values('004' , '002' , N'天河区' , 0)
insert into tb values('005' , '003' , N'罗湖区' , 0)
insert into tb values('006' , '003' , N'福田区' , 0)
insert into tb values('007' , '003' , N'宝安区' , 0)
insert into tb values('008' , '007' , N'西乡镇' , 1)
insert into tb values('009' , '007' , N'龙华镇' , 2)
insert into tb values('010' , '007' , N'松岗镇' , 3)
insert into tb values('011' , '006' , N'岗下镇' , 4)
insert into tb values('012' , '005' , N'上沙镇' , 5)
insert into tb values('013' , '004' , N'天河镇' , 6)
go
;WITH T AS
(
SELECT ID , PID , NAME , CNT FROM TB
UNION ALL
SELECT B.ID , A.PID , A.NAME , B.CNT FROM TB AS A JOIN T AS B ON A.ID = B.PID
)
SELECT p.id , p.name , count(1) unit, sum(t.cnt) sum_cnt FROM tb p , t
where isnull(p.pid,'000') = isnull(t.pid,'000') and p.name = t.name group by p.id , p.name order by p.id
drop table tb