У меня есть автореферентная таблица с содержанием, как это:самостоятельно реферирование стола с ребенком таблицей
Self-referencing parent table
ID ParentID Name
---------------------
1 John
2 1 Mike
3 2 Erin
4 1 Janie
5 Eric
6 5 Peter
Иерархия дерева должна выглядеть следующим образом
- Джон
- Майк
- Erin
- Джени
- Майк
- Эрик
- Питер
И стол ребенок, который хранит лист родительской таблицы, которая выглядит следующим образом:
ID Sales
3 100
3 100
4 200
4 200
6 300
6 300
6 300
Я пытаясь свернуть сумму от листового узла до иерархии, чтобы она возвращалась как. .
ID Name Sum
1 John 800
2 Mike 200
3 Erin 200
4 Janie 400
5 Eric 900
6 Peter 900
Любые идеи, как достичь этого в sql 2008? Заранее спасибо.
Спасибо за ответ, Дем. Я получаю два сообщения об ошибке с этим запросом: 'GROUP BY, HAVING или агрегированные функции не разрешены в рекурсивной части рекурсивного общего выражения таблицы 'flattend'.' И 'Outer join не допускается в рекурсивной части рекурсивное общее табличное выражение «flattend». '. Есть идеи? – Eric
@ Эрик - Я так не практиковался, что даже не помню, что это было так. Я перекодировал так, что вся агрегирование выполняется за пределами CTE. – MatBailie
Извините за поздний ответ, вчера мне пришлось уйти, и я весь день встречался. Запрос работает как шарм. Но мне не удалось понять CTE и как работает функция COALESCE. Мне нужно добавить столбец ParentID в результат, чтобы я мог восстановить древовидную структуру в приложении, но я продолжаю получать разные значения. Можете ли вы помочь немного больше? Еще раз спасибо. – Eric