日期:2014-05-18  浏览次数:20482 次

无限分类 查询问题
id, pid, ReportToDepth,ReportToPath
1 0 0 /1/
2 0 0 /2/
5 2 1 /2/5/
30 2 1 /2/30/
6 5 2 /2/5/6/
9 6 3 /2/5/6/9/
17 9 4 /2/5/6/9/17/
16 17 5 /2/5/6/9/17/16/
4 1 1 /1/4/
10 4 2 /1/4/10/


 id, imgTypeId, imgName
1 1 测试2
3 2 测试2
5 4 测试2
8 5 测试2
2 5 测试2
13 5 测试2
14 6 测试2
11 6 测试2
7 6 测试2
12 9 测试2
4 9 测试21
第一张表 类别表imgType(编号,父类编号,深度,包含类别编号)
第二张表 信息表imgInfo (编号,类别编号,图片名称)
查询:根目录(pid=0) 所包含的类别个数,所包含类别(包括子类)下面的图片数量
要求结果
id类别ID pid 包含的类别个数 图片数
1 0 2 2
2 0 5 9

------解决方案--------------------
数据是不是有点不对。
------解决方案--------------------
看看这个能不能帮你
http://topic.csdn.net/u/20120306/15/238f2ce5-8f96-4756-b8bb-af96f420046c.html?seed=658234112&r=77865502#r_77865502http://topic.csdn.net/u/20120306/15/238f2ce5-8f96-4756-b8bb-af96f420046c.html?seed=658234112&r=77865502#r_77865502
=========================================================================================

欢迎访问我的博客
------解决方案--------------------
参考:
SQL code

/*
标题: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