I’ve two MS SQL tables: Category, Question. Each Question is assigned to exactly one Category. One Category may have many subcategories.
Category
- Id : bigint (PK)
- Name : nvarchar(255)
- AcceptQuestions : bit
- IdParent : bigint (FK)
Question
- Id : bigint (PK)
- Title : nvarchar(255)
… - IdCategory : bigint (FK)
How do I recursively count all Questions for a given Category (including questions in subcategories). I’ve tried it already based on several tutorials but still can’t figure it out 🙁
The CTE builds a list of which subcategories are under each category- essentially, it recurses through the tree and produces a flattened view of (top category, descendant category).
The initial term (before the union all) selects each category, and indicates that it contains itself- the recursive term then includes all the subcategories for categories found so far, and stops (produces no results) automatically when all the category_id columns in the previous iteration were leaf categories.
Based on that, we simply join this flattened view back onto question to produce a set of (top category, question) rows, and aggregate based on (top category).