У меня есть следующие таблицы:
Categories
=================================
CategoryID | ParentID | Text
---------------------------------
1 NULL Text
2 1 Text
3 NULL Text
4 1 Text
Items
=================================
ItemID | CategoryID | Text
---------------------------------
1 1 Text
2 2 Text
3 4 Text
4 3 Text
Имейте в виду, что это не иерархия n-уровня, категории имеют только 2 уровня, поэтому ни у одной категории не может быть, например, parentID, равный 2.
То, что я ищу, - это способ возврата категорий с дополнительным столбцом, в котором отображается количество элементов, которыми владеет категория (включая ее подкатегории).
т.е. Я ищу один запрос (или процедуру), который может вернуть что-то вроде следующего:
Categories
============================================
CategoryID | ParentID | Text | Count
--------------------------------------------
1 NULL Text 3
2 1 Text 1
3 NULL Text 1
4 1 Text 1
Мой текущий метод получения элементов, связанных с категорией, следующий (с учетом categoryID, @CategoryID):
SELECT * FROM Items
WHERE CategoryID
IN (SELECT CategoryID FROM Categories where ParentID = @CategoryID or CategoryID = @CategoryID)
Моя проблема в том, что я не могу связать это с запросом выбора для самих категорий.
Это, вероятно, очень просто, но я пробовал методы, использующие CTE, различные группы по предложениям, но иерархическая природа категорий, кажется, отбрасывает мою логику.
Спасибо за любую помощь!
РЕДАКТИРОВАТЬ: запрос также должен учитывать категории без элементов, связанных с ними