日期:2014-05-18 浏览次数:20507 次
/* 标题: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