递归计数查询(SQL Server)
我有两个MS SQL表:类别,问题。每个问题只分配给一个类别。一个类别可能有多个子类别 类别递归计数查询(SQL Server),sql,sql-server,stored-procedures,recursion,Sql,Sql Server,Stored Procedures,Recursion,我有两个MS SQL表:类别,问题。每个问题只分配给一个类别。一个类别可能有多个子类别 类别 Id:bigint(PK) 姓名:nvarchar(255) 问题:比特 IdParent:bigint(FK) 问题: Id:bigint(PK) 标题:nvarchar(255) IdCategory:bigint(FK) 如何递归计算给定类别的所有问题(包括子类别中的问题)。我已经根据一些教程尝试过了,但仍然无法理解:( CTE构建了一个列表,其中每个类别下都有子类别——本质上,它在树中
- Id:bigint(PK)
- 姓名:nvarchar(255)
- 问题:比特
- IdParent:bigint(FK)
- Id:bigint(PK)
- 标题:nvarchar(255)
- IdCategory:bigint(FK)
基于此,我们只需将此展开视图连接回问题,以生成一组(顶级类别,问题)行,并基于(顶级类别)进行聚合.Thomas,SQL SERVER 2008 Express Edition.araqnid,您的解决方案可以立即运行,但是结果集包含所有类别。如何仅获取给定类别id的计数?在类别树定义中的初始项中,在“union all”之前添加一个“where”子句。这定义了扫描类别树的起点-如果将其限制为单个类别,则子树将以该类别为根。
with /* recursive */ category_tree as (
select category.id as top_category_id, category.id as category_id
from category
union all
select top_category_id, category.id
from category_tree
join category on category.idparent = category_tree.category_id
)
select category_tree.top_category_id as category, count(*) as question_count
from category_tree
join question on question.idcategory = category_tree.category_id
group by category_tree.top_category_id