Я нашел чрезвычайно полезную статья находится по адресу: Simplest way to do a recursive self-join in SQL Server?Суммы на Рекурсивном автообъединение
Предположит, что в этом примере, что существует еще один столбец под названием «Количество», который хранит целые числа, которые выглядят примерно так:
PersonID | Initials | ParentID | Quantity
1 CJ NULL 1
2 EB 1 2
3 MB 1 1
4 SW 2 1
5 YT NULL 1
6 IS 5 1
Если я просил иерархию CJ, это было бы
PersonID | Initials | ParentID | Quantity | HasSubordinate
1 CJ NULL 2 1
2 EB 1 1 1
3 MB 1 1 1
4 SW 2 1 0
столбец HasSubordinate указывает последний человек в иерархии. Я хотел бы отобразить последнего человека в иерархии с количеством каждой предыдущей строки, умноженной вместе. В этом случае величина будет равна 2 (2 x 1 x 1 x 1 = 2).
PersonID | Initials | ParentID | Quantity | HasSubordinate
4 SW 2 2 0
Мой код:
WITH q AS
(
SELECT *
FROM mytable
WHERE PersonID = 1
UNION ALL
SELECT m.*
FROM mytable m
JOIN q
ON m.parentID = q.PersonID
)
SELECT *
FROM q
WHERE HasSubordinate = 0
Любая помощь очень ценится !!
Удивительный! Это именно то, что я искал, но по какой-то причине не смог это понять. Просто примечание, была начальная ошибка, жалующаяся на несовместимые типы, поэтому мне пришлось жестко кодировать количество в виде десятичного числа. Спасибо вам за помощь!! – user2572833
Я не думаю, что это правильный ответ. Если вы, например, меняете количества от 1 до 2, вы должны получить 2 * 2 * 2 * 2 = 16, но этот запрос вернется 8 –
@GiorgiNakeuri Согласен, поэтому в нижней части моего ответа я думал об альтернативах но оставил его в покое после его принятия. –