|
|
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Всех приветствую, возник такой вопрос, необходимо сагрегировать суммы в иерархическом запросе. Имеется некая иерархия: "Блоки/Контрагенты/Статьи/Счета", иерархия настроена определенным образом как этого хочет видеть заказчик. Соответственно, при присоединении данных к иерархии суммы в рублях у меня находятся в самых нижних уровнях иерархии. Задача - получить агрегированные суммы по иерархии. Например, я делаю селект: Код: plaintext 1. 2. 3. 4. и получаю нечто вроде: Код: plaintext 1. 2. 3. 4. 5. А хотелось бы Код: plaintext 1. 2. 3. 4. 5. Притом, гонять иерархию на расчет каждой суммы (сумма иерархии от парент-нода текущей строки в иерархии) не хотелось бы - увеличение времени работы сложного запроса, практика показала, что на больших данных могут еще и нехорошие ошибки вываливаться. Также не пойдет метод джоина с группировкой по каждой строке иерархии по полям Блок/контрагент/статьи/счета, т.к. могут быть сложные правила соединения (например, по определенным дополнительным условиям данные попадают в другой блок), а потом заворачивание на иерархию. Самым простым я тут вижу написание функции по типу sys_connect_by_path, но суммирующую суммы с дочерних нодов (допускается с суммой текущего нода для простоты). Но чтото не могу сообразить как это сделать. Помогите разобраться :) Пс: Oracle 9i ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 08:22 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 09:19 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Вложенный деревянный запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 09:35 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-, к сожалению апгрейд исключен. Продакшен сервер с офф.поддержкой, на 10ку нет денег. 2Добрый Э-эх. Я изначально решил задачу точно таким же методом, но, к сожалению, время работы его заметно увеличилось, при больших объемах вываливается too old snapshot или еще какая-нибудь нехорошая вещь. Материализовать подзапрос также не предоставляется возможным изза вероятности выпадения ошибки нехватки temp. Поэтому нужно какое-нибудь элегантное решение. Есть конечно вариант через промежуточную temp таблицу, но очень хотелось бы без нее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:41 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82, Почему бы не хранить нужные тебе суммы в той же таблице? Один раз столбец просчитаешь, дальше выборка будет мгновенная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:46 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82, Если уровень вложенности ограничен udf_evaluate(sys_connect_by_path(amount, '+')) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:54 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Alocky, Иерархия - это наборы значений, там свои поля добавлять нельзя - да и не нужно это - т.к. система многопользовательская. Реальные данные, которые соединяются с этой иерархией, сгруппированные данные порядка мильона строк. Фактически эти сгруппированные данные - это еще один более нижний уровень, т.к. пользователь может запросить и детализацию (в разных блоках группировка по разным критериям может быть). Хотя есть вариант, на который вы меня навели: сделать временную таблицу, в нее сгрузить и иерархию, и сгруппированные данные со ссылкой на парент_ид, потом все это завернуть в отчет. Однако это не решает моей задачи. Пересчет каждого нода все равно надо делать :) Хотя в данном случае snapshoot too old практически сводится к минимальным шансам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:56 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82 Иерархия - это наборы значений, там свои поля добавлять нельзя - да и не нужно это - т.к. система многопользовательская. Что-то связи не увидел chameleon82 Пересчет каждого нода все равно надо делать Конечно надо, кто ж спорит. Решать это можно по-разному, тут от задачи зависит. Общих рекомендаций, думаю, не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:02 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-chameleon82, Если уровень вложенности ограничен udf_evaluate(sys_connect_by_path(amount, '+')) Нет функции udf_evaluate, google не помогает :( Что это за функция? Если суммы собираются с нижних уровней к верхним, то в качестве решения пойдет. Уровень вложенности не более 5-6ти, так что в этом плане так же пойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:05 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
ALockychameleon82 Иерархия - это наборы значений, там свои поля добавлять нельзя - да и не нужно это - т.к. система многопользовательская. Что-то связи не увидел OeBS, иерархию можно получить в виде вьюшки. Если повесить поле сумма на какой-нибудь атрибут, то что произойдет, если два пользователя запустят отчет одновременно? Fail. В общем я хотел бы решение, похожее на приведенное -2-, возможно с помощью самописной аналитической функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:09 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82Нет функции udf_evaluate, google не помогает :( Что это за функция? Если суммы собираются с нижних уровней к верхним, то в качестве решения пойдет. Уровень вложенности не более 5-6ти, так что в этом плане так же пойдет.Что за функция, можно было догадаться из названия, но собирает она действительно сверху вниз - не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:15 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-Что за функция, можно было догадаться из названия, но собирает она действительно сверху вниз - не подходит. По названию то я догадался ), но в нашей 9i ее нет ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:18 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
здесь писал лет 5 назад используем принцип в сотнях отчетов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:25 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82, без двойной деревяшки - это так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:32 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Не знаю, будет ли быстрее пять-шесть over(partition by ...) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:33 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-, sys_connect_by_path(id,'/') -> sys_connect_by_path('*','/') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:34 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-, черт... в общем, выровнять id на фиксированную длину ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:35 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
В общем придумал такую вещь :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:00 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
^^^ Кстати, в этом виде все равно просчитывается для каждого нода :( а используются ли повторно вычисленные значения по иерархии - не знаю как проверить? Если да - то замечательно, если нет, то видимо все равно тормоза будут. Пс: в реальной иерархии порядка 50-100 нодов, с детализацией может быть до 1000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:10 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Без анала и моделей: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:51 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Решение интересное Однако std.subword - опять же с 10ки? или что за пакет? заменил на substr, вроде работает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:02 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82Однако std.subword - опять же с 10ки?Нет еще с семерки тяну на каждую БД, где пасусь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:08 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
От having можно попробовать избавиться через grouping sets, но не допер как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:10 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-От having можно попробовать избавиться через grouping sets, но не допер как. Указать необходимые в выводе сочетания строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:09 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-, -2-Без анала и моделей: Результат не верный :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:25 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
LGРезультат не верный :)А тестовые данные и ожидаемый результат? Или просто ткнуть носом в ошибку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:57 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:07 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
LG, Сорри, забыл Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:13 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
LG, substr не тоже самое, что subword. Смысл p1..p5 - деревянный unpivot. Там должны получиться айдишники соответствующей глубины. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:28 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-, А ... Ясно ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:39 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82, Можно построить транзитивное замыкание на иерархии. Тогда агрегирующие (и некоторые другие) запросы сильно упростятся. Но есть недостаток - его нужно поддерживать. Если иерархия меняется нечасто, это обычно не проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 21:01 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
wildwindЕсли иерархия меняется нечасто и при этом иерархия не слишком глубока, то еще проще заменить иерархию классификатором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 21:31 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 22:10 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 22:36 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Последнее очень близко к истине :) Потестировал на кошках, too old snapshot`ом пока не пахнет :) Осталось дописать запрос по реальным данным. Остался неясным вопрос, каким танственным образом выстраивается правильная иерархия, ведь во внешнем запросе нет ни слова об упорядочивании! пс: а вообще можно ли на иерархическом запросе написать собственную анналитическую функцию, которая бы учитывала иерархию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 18:11 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-, можно ли выложить код функции std.subword? в интернете так и не нашел его ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 18:19 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
wildwindchameleon82, Можно построить транзитивное замыкание на иерархии. Тогда агрегирующие (и некоторые другие) запросы сильно упростятся. Но есть недостаток - его нужно поддерживать. Если иерархия меняется нечасто, это обычно не проблема. можно поподробнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 18:20 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82можно поподробнее? Транзитивное замыкание бинарного отношения R на множестве X есть наименьшее транзитивное отношение на множестве X, включающее R Если попроще - то предлагается дополнить табличку id parent_id2 13 24 2 следующим образом: 1->2->3 => 1,3 1->2->3->4 => 1,4 2->3->4 => 2,4 id parent_id2 13 24 21 31 42 4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 18:39 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82-2-, можно ли выложить код функции std.subword? в интернете так и не нашел его (Она слишком универсальная и будет излишне для данной задачи греть процессор. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 18:49 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous следующим образом: 1->2->3 => 1,3 1->2->3->4 => 1,4 2->3->4 => 2,4 + рефлексивность 1->1 2->2 3->3 4->4 И скорее не дополнить, а создать еще одну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 19:32 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
wildwind 1->1 2->2 3->3 4->4 Это будет анекдот про слона, муху и вечный кайф :) Ну а если по нашенски - то ORA-01436: CONNECT BY loop in user data ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 19:45 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, Поэтому замыкание - отдельно. А иерархия - для иерархических запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 20:09 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
На основе решения by Vladimir Sitnikov, которое основывается на граничных суммах, можно предложить более общее и простое: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2010, 21:11 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2010, 09:49 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopИспользует для определения окна rows BETWEEN, а не range BETWEEN, но поскольку содержит коррелированный подзапрос - отрабатывает медленнее, зато быстрее многих других предложенных. ;)И гораздо медленнее элементарного при наличии индекса на parent_id (а куда ж без него? :) ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2010, 17:16 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
andreymxdbms_photoshop, моё таки круче :)) опробовано на сотнях отчетов в течение 5 летОно может и прекрасно работает, если у тебя в таблице с иерархией пару сотен строк. А теперь представь, что в иерархии полмиллиона строк и ты сначала получаешь свои all_relations, а потом соединяешь их с иерахией. Elicdbms_photoshopИспользует для определения окна rows BETWEEN, а не range BETWEEN, но поскольку содержит коррелированный подзапрос - отрабатывает медленнее, зато быстрее многих других предложенных. ;)И гораздо медленнее элементарного при наличии индекса на parent_id (а куда ж без него? :) ).Не если еще чуток пофантазировать можно обойтись без подзапроса: Код: plsql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2012, 20:57 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, предварительно покрутил, и, возможно, не всё ещё понял добавил одну строку в исходные данные: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. получил:IDPARENT_IDAMOUNTSUMMA11064102110054003220002000423000300062300130076005110001000интересует сумма 1300 для строки id=6 так и надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2012, 08:51 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopВроде должно работатьБамбуковый лес: Код: plsql 1. 2. 3. Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2012, 10:26 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
andreymxинтересует сумма 1300 для строки id=6 так и надо?Нет, это неверно. Ищу начало следующей ветки по окну с большим rn и тем же уровнем. А надо искать по окну с большим rn и тем же либо меньшим уровнем. Вот из-за выделенного возникают проблемы с определением окна. К сожалению, если в кляузе order by фигурируют два поля, то два RANGE указать нельзя, а было бы забавно. :) Надо подумать можно ли придумать такой expression и соответствующий range, чтоб искало правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2012, 13:02 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, авторОно может и прекрасно работает, если у тебя в таблице с иерархией пару сотен строк. А теперь представь, что в иерархии полмиллиона строк и ты сначала получаешь свои all_relations, а потом соединяешь их с иерахией. предпочитала подготовить полуфабрикат --итоги по цех,участок,профессия,месяц, наименование итога, сумма во временную таблицу РАБ1, обычно текстовик для скорости, суммы округляла согласно требованию заказчика --с РАБ1 уже требуемый отчет с ---------перекрестный, с анализом количества столбиков(обычно до 17 при отчете за год мес-кв-год) ---------условно гладкий типа количество, сумма_без_ндс,ндс, всего с ндс по позициям номенклатуры --обычно формировала в формате НТМ для удобства просмотра броузером или печати вордом(хотя и екселем приходилось иногда открывать для удобства доводки или очень большим для ворда) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2012, 15:31 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
ПЕНСИОНЕРКАпредпочитала подготовить полуфабрикат --итоги по цех,участок,профессия,месяц, наименование итога, сумма во временную таблицу РАБ1 ну, это по задаче где-то надо, где-то и не нужно, где-то вообще не имеет смысла, а где-то через WITH ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2012, 22:13 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Еще вариант. Как-то так получилось. Правда на больших обьемах данных не тестировал Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. функция xx_sql.query возвращает результат первой колонки первой строки указанного запроса. можно заменить на что попроще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2012, 12:20 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82Еще вариант. Как-то так получилось. Правда на больших обьемах данных не тестировал Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. функция xx_sql.query возвращает результат первой колонки первой строки указанного запроса. можно заменить на что попроще.Не совсем понятна затея строить всё из всех, чтоб потом тупо схлопнуть, но в своей функции здесь нет особой необходимости. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 13:42 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 13:49 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
как минимум надо не забывать, что макс длина результата sys_connect_by_path = 4000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 14:09 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Чуть выше ошибочка была. Для Oracle >= 11.2.0.2, правда с ограничением andreymxкак минимум надо не забывать, что макс длина результата sys_connect_by_path = 4000 возможен такой код Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. и опять же на 11-ом, но уже цивилизованный обход Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2012, 11:43 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82, все тут хорошо, до тех пор, пока не появляются родители, у которых есть свои суммы, которые надо приплюсовать к дочерним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2013, 09:01 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
sim_tomchameleon82, все тут хорошо, до тех пор, пока не появляются родители, у которых есть свои суммы, которые надо приплюсовать к дочерним вас затрудняет сложить два числа ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2013, 12:41 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
sim_tom, авторвсе тут хорошо, до тех пор, пока не появляются родители, у которых есть свои суммы, которые надо приплюсовать к дочерним только бы это --ерунда хуже, когда есть еще и в том числе статьясуммапо заводу100т--по цехам 60-----в том числе основным20--по соцсфере40 по цехам всего\ по основным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2013, 15:02 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
ПЕНСИОНЕРКА, а тут что сложного? делаете "в том числе" и "не в том числе", в конечном выводе скрываете "не в том числе". тут все в настройках иерархии, либо на ноде вообще дочерние не складывать, либо расчитывать все дочерние суммы и не расчитывать или игнорировать расчет на конкретном ноде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2013, 07:27 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82и опять же на 11-ом, но уже цивилизованный обход Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Очень заинтересовал пример с рекурсией, но в случае ненулевых значений у рождителей - они задваиваются в общей сумме: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Для простоты проверки положил s=1 для всех узлов? Пролучаю для узла 2 сумму "8" а не "4": Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Никак сам не могу побороть - это вообще реально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 10:31 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
StayAtHomeНикак сам не могу побороть - это вообще реально?Потому что нужно поменьше ненужной фантазии, когда можно тупо в лоб Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 11:23 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
У кого есть в наличии 12.2 можете попробовать выполнить с закоментированным правилом вместо активного Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. С all rows вместо one row все ок, но все строки для каждого матча здесь не нужны. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2017, 03:20 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1885841]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
220ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
105ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 611ms |

| 0 / 0 |
