sql - SQL - 在另一个表中递归查找计数
问题描述
我有一个表,它同时具有类别和子类别,例如:
CategoryID CategoryName ParentCategoryID
1 CatA NULL
2 CatA1 1
3 CatA2 1
4 CatA3 1
5 CatB NULL
6 CatB1 5
7 CatC NULL
8 CatC1 7
我有另一个表,我有映射
MappingID CategoryID ItemID
1 2 1
2 3 1
3 6 2
4 8 3
5 2 3
6 3 4
7 4 4
8 2 3
9 3 4
10 2 2
11 2 2
12 2 2
13 2 3
14 2 1
我需要一个结果集,其中显示每个类别的所有项目的计数,例如:
Category No. of Items
1 12
5 1
7 1
有人可以指导我吗?
我试过使用 CTE :
WITH CTE (CategoryID, CategoryName, ParentID, CategoryParentName)
AS
(
SELECT CategoryID,
CategoryName,
ParentCategoryID,
CategoryName AS CategoryParentName
FROM [dbo].[Category]
WHERE ParentCategoryID IS NULL
AND IsDeleted = 0
UNION ALL
SELECT garages.CategoryID,
garages.CategoryName,
garages.ParentCategoryID,
traces.CategoryName AS CategoryParentName
FROM [dbo].[Category] AS garages
INNER JOIN CTE AS traces ON traces.CategoryID= garages.ParentCategoryID
)
SELECT gr.CategoryID, COUNT(map.CategoryID) AS Total
FROM CTE gr
INNER JOIN [dbo].[CategoryMapping] map ON gr.CategoryID = map.CategoryID
GROUP BY gr.CategoryID
解决方案
如果只有两个级别的类别,则不需要递归查询
select coalesce(c.ParentCategoryID, c.CategoryID), count(*)
from Category c
join CategoryMapping m on c.CategoryID = m.CategoryID
group by coalesce(c.ParentCategoryID, c.CategoryID)
显然,没有映射的类别将不存在。
推荐阅读
- ios - 使用随机数访问字典中的值
- tensorflow - rasa nlu ner_crf 未提取任何实体
- android - 将消息正文保存到 SQLite 数据库
- python - python中“cross-env”的对应物是什么?
- python - 将网页中的抓取数据保存到 Excel 文件时出现问题
- python - model = Django Meta 类中的用户
- python - 使用 python requests-HTML 获取标签的父元素
- php - Laravel 形成意外的“命名空间”
- java - AlarmManager.setAlarmClock()在Android Pie的右上角没有显示警报
- javascript - 自动完成问题