powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получение итоговых значений в иерархии
9 сообщений из 9, страница 1 из 1
Получение итоговых значений в иерархии
    #39677681
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал получать сумму дочерних строк через запрос
SELECT LEVEL,
LPAD(' ', 10 * LEVEL) || NAME,
SUBSTR(SYS_CONNECT_BY_PATH(NAME, '/'),1,INSTR(SYS_CONNECT_BY_PATH(NAME, '/'), '/', -1)-1) AS PATH,
ZP,
(SELECT SUM(ZP)
FROM MY_TABLE2 B
START WITH B.BOSS = A.ID
CONNECT BY PRIOR ID = BOSS) TOTAL_CHILD_SAL
FROM MY_TABLE2 A
START WITH BOSS IS NULL
CONNECT BY PRIOR ID = BOSS
ORDER SIBLINGS BY NAME;
После пробую получить запрос через
WITH REC(WAY,
NAME,
LVL,
WAY_2,
ZP,
BOSS,
ID) AS
(SELECT ' ' || '/' || NAME, NAME, 1 LVL, '' || '/' || ID, ZP, BOSS, ID
FROM MY_TABLE2
WHERE BOSS IS NULL
UNION ALL
SELECT R.WAY || '/' || T.NAME,
T.NAME,
R.LVL + 1,
R.WAY_2 || '/' || T.ID,
T.ZP,
T.BOSS,
T.ID
FROM MY_TABLE2 T
JOIN REC R
ON T.BOSS = R.ID
) SEARCH DEPTH FIRST BY ID SET ORD
SELECT LVL,
LPAD(' ', 10 * LVL) || NAME,
SUBSTR(WAY, 1, INSTR(WAY, '/', -1) - 1),
WAY_2,
ZP
FROM REC
И пока не получается , есть возможность ли это сделать вообще в таком запросе ?
Буду благодарен если подскажите .


Таблицу прилагаю
INSERT INTO my_table2 VALUES ( 1 ,0, 'Pushkin', 1);
INSERT INTO my_table2 VALUES (2, 1, 'Gvidon' , 2 );
INSERT INTO my_table2 VALUES (3, 1, 'Rzevsii', 3);
INSERT INTO my_table2 VALUES (4, 3, 'Dubrovski', 5);
INSERT INTO my_table2 VALUES (5, 4, 'Petr1', 4);
INSERT INTO my_table2 VALUES (6, 5, 'Nevski', 4);
INSERT INTO my_table2 VALUES (7, 3,'Ruslan', 2);
INSERT INTO my_table2 VALUES (23, 0, 'Ludmila' , 2 );
INSERT INTO my_table2 VALUES (8, 7, 'Gaivata', 4);
INSERT INTO my_table2 VALUES (9, 2, 'Gendalf', 5);
INSERT INTO my_table2 VALUES (10, 9, 'Sofia' , 4);
INSERT INTO my_table2 VALUES (11, 10, 'Alice' , 5);
INSERT INTO my_table2 VALUES (12, 2, 'Santa' , 11);
INSERT INTO my_table2 VALUES (13, 14, 'Satana' , 4);
INSERT INTO my_table2 VALUES (14, 0, 'God' , 2);
INSERT INTO my_table2 VALUES (15, 14, 'Michael' , 5);
INSERT INTO my_table2 VALUES (16, 13, 'Azzazel' , 3);
INSERT INTO my_table2 VALUES (17, 14, 'Begemot' , 4);
INSERT INTO my_table2 VALUES (18, 17, 'Voland' , 5);
INSERT INTO my_table2 VALUES (19, 18, 'Maste_r' , 5);
INSERT INTO my_table2 VALUES (20, 14, 'Berlioz' , 1);
INSERT INTO my_table2 VALUES (21, 1, 'Raskolnikov' , 6);
INSERT INTO my_table2 VALUES (22, 21, 'Marmeladov' , 6);
...
Рейтинг: 0 / 0
Получение итоговых значений в иерархии
    #39677842
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
WITH T AS (
           SELECT  ID,
                   BOSS,
                   LPAD(' ',2 * (LEVEL - 1)) || NAME NAME,
                   ZP,
                   SYS_CONNECT_BY_PATH(ID,'/') || '/' PATH
             FROM  MY_TABLE2
             START WITH BOSS = 0
             CONNECT BY BOSS = PRIOR ID
          )
SELECT  NAME,
        ZP,
        BRANCH_ZP
  FROM  T
  MODEL
    DIMENSION BY(PATH)
    MEASURES(ID,BOSS,NAME,ZP,0 BRANCH_ZP)
    RULES(
          BRANCH_ZP[ANY] = SUM(ZP)[PATH LIKE cv() || '%']
         )
/

NAME                                                                           ZP  BRANCH_ZP
---------------------------------------------------------------------- ---------- ----------
Pushkin                                                                         1         62
  Gvidon                                                                        2         27
    Gendalf                                                                     5         14
      Sofia                                                                     4          9
        Alice                                                                   5          5
    Santa                                                                      11         11
  Rzevsii                                                                       3         22
    Dubrovski                                                                   5         13
      Petr1                                                                     4          8
        Nevski                                                                  4          4
    Ruslan                                                                      2          6
      Gaivata                                                                   4          4
  Raskolnikov                                                                   6         12
    Marmeladov                                                                  6          6
God                                                                             2         29
  Satana                                                                        4          7
    Azzazel                                                                     3          3
  Michael                                                                       5          5
  Begemot                                                                       4         14
    Voland                                                                      5         10
      Maste_r                                                                   5          5
  Berlioz                                                                       1          1
Ludmila                                                                         2          2

23 rows selected.

SQL> 



SY.
...
Рейтинг: 0 / 0
Получение итоговых значений в иерархии
    #39678140
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, Нужна именно рекурсивный запрос
...
Рейтинг: 0 / 0
Получение итоговых значений в иерархии
    #39678146
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pol.kaНужна именно рекурсивный запросКому?
Как лутше получить сумму по всем узлам дерева
...
Рейтинг: 0 / 0
Получение итоговых значений в иерархии
    #39678147
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pol.kaSY, Нужна именно рекурсивный запросчто понимаете под "рекурсивным запросом" ?
запрос с statrt with ... connect by prior ? (доступен с таких дремучих версий, что уж и не помню с каких именно)
Или же рекурсивный WITH-subquery factoring clause ? (доступен с 11g, если мне память не изменяет)
...
Рейтинг: 0 / 0
Получение итоговых значений в иерархии
    #39678161
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Анна, Второй вариант , с первым всё получается довольно просто , проблема именно в втором варианте
...
Рейтинг: 0 / 0
Получение итоговых значений в иерархии
    #39678163
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic, Спасибо но боюсь эта тема не поможет
...
Рейтинг: 0 / 0
Получение итоговых значений в иерархии
    #39678343
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pol.kaElic, Спасибо но боюсь эта тема не поможет

Да ты пойми что идя от папашки к чаду хоть чeрез иeрархию хоть через рeкурсию - собрать сумму по потомкам за один присест не получится. Придется прикручивать суммирование либо через subquery в select list либо через модельку либо еще как. Если идти от листа к корню (если LEVEL и ORDER не важен) то суммировать можно но при этом папашка будет просуммирован несколько раз если имеет несколько чад, так-что то-же непросто.

SY.
...
Рейтинг: 0 / 0
Получение итоговых значений в иерархии
    #39678361
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, Уже всё вышло , ваш пример очень помог.
Спасибо.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получение итоговых значений в иерархии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]