T-SQL - 使用运行小计查询分层表(每行有一个项目计数)
我正在尝试使用遵循此设计的分层表创建动态导航:
CREATE TABLE #CPTree(UID int,ParentID int,Name nvarchar(150),
ItemCount int)
插入#CPTree VALUES('1','0','车辆','0')
插入#CPTree VALUES('2','1','Bikes','10')
插入#CPTree VALUES('3','1','汽车','20')
插入#CPTree值('5','2','Bike Make 1','0')
插入#CPTree值('6','2','Bike Make 2','5')
插入#CPTree值('7','3','Car Make 1','0')
插入#CPTree值('8','3','Car Make 2','0')
插入#CPTree值('9','5','自行车模型A','7')
插入#CPTree值('10','5','自行车模型B','1')
插入#CPTree值('11','7','汽车模型D','4')
插入#CPTree值('12','8','Car Model X','2')
- 使用CTE检索类别/子类别的级别
;使用HCTE(CategoryID,ParentID,Name,itemcount,Level)作为(选择
UID,ParentID,Name,itemcount,0作为来自#CPTree c的级别,其中c.UID
= 3 - 汽车类别
union all选择c.UID,c.ParentID,c.Name,c.itemcount,ch.Level + 1
来自#CPTree c内连接HCTE ch on ch.CategoryID = c.ParentID)
SELECT * FROM HCTE
DROP TABLE #CPTree
- 结束
我想检索每个类别的总项目数,例如,顶级类别'汽车'(项目数20)有2个孩子(两个项目计数为0),每个都有子项(2和4项目计数)尊敬)。汽车的总项目数量为26.同样,Car Make 1(CategoryID 7)的项目总数将为4(来自其子项的总和 - CategoryID 11)。结果将返回:
CategoryID | ParentID |名称| ItemCount |等级|
TotalItemCount
3 | 1 |汽车| 20 | 0 | 26
7 | 3 |汽车制造1 | 0 | 1 | 4
8 | 3 |汽车制造2 | 0 | 1 | 2
12 | 8 |汽车模型X | 2 | 2 | 2
11 | 7 |汽车型号D 4 | 2 | 4
这样我就可以看到子类别是否在子类别中有任何项目,但如果他们自己有任何项目则不一定。我的实时表有很多级别,因此查询必须继续钻取类别,直到达到最后一级。如有必要,我可以提供更深入的例子。
任何帮助表示赞赏!谢谢
没有找到相关结果
已邀请:
3 个回复
抽法
郡晒景沧
募磷