Мне нужна помощь в решении проблемы, связанной с данными, сохраненными в таблице моделей «родители-дети», и отчетом, который мне нужно построить. Я уже пробовал искать темы о проблемах родителей и детей, но не смог найти ничего полезного в моем сценарии.
Что у меня есть
Сервер базы данных Microsoft SQL Server 2000.
A categories
таблица, которая имеет четыре столбца: category_id
, category_name
, father_id
и visible
; категории имеют x корневые категории (где x является переменной) и могут иметь глубину y (где y является переменной), если категория относится к корневому уровню, она имеет father_id
ноль, иначе она заполняется идентификатором категории отца.
A sales
таблица, в которой есть z столбцов, один из которых category_id
, внешний ключ для categories.category_id
; продажа всегда должна иметь категорию, и она может быть связана в любом месте вышеупомянутого уровня y .
Что мне нужно
Мне был предложен отчет, отображающий только корневые категории (первого уровня) и количество торговых принадлежностей для каждого из них или их детей, независимо от их глубины. То есть если одной из корневых категорий является food
, которая имеет дочернюю категорию с именем fruit
, которая имеет дочернюю категорию с именем apple
, мне нужно сосчитать каждый элемент, принадлежащий food
или fruit
или apple
.
Не могли бы вы использовать модель данных с вложенным набором?
Я знаю модель вложенного набора, но у меня уже есть таблица таким образом, и перенос ее на модель вложенного набора будет проблематичным (не говоря уже о том, что я даже не полностью понял, как работает вложенный набор), не считая изменения, необходимые в приложении с использованием базы данных. (Если кто-то считает, что это по-прежнему наименее болезненный способ, объясните, почему и как текущие данные могут быть перенесены.)
Не могли бы вы использовать CTE (общие табличные выражения)?
Нет, это Microsoft SQL Server 2000 , а общие табличные выражения представлены в 2005 редакции.
Заранее спасибо, Андреа.