Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получение итоговых значений в иерархии / 9 сообщений из 9, страница 1 из 1
23.07.2018, 13:07
    #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
23.07.2018, 17:41
    #39677842
SY
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
24.07.2018, 11:25
    #39678140
Pol.ka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение итоговых значений в иерархии
SY, Нужна именно рекурсивный запрос
...
Рейтинг: 0 / 0
24.07.2018, 11:31
    #39678146
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение итоговых значений в иерархии
Pol.kaНужна именно рекурсивный запросКому?
Как лутше получить сумму по всем узлам дерева
...
Рейтинг: 0 / 0
24.07.2018, 11:32
    #39678147
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение итоговых значений в иерархии
Pol.kaSY, Нужна именно рекурсивный запросчто понимаете под "рекурсивным запросом" ?
запрос с statrt with ... connect by prior ? (доступен с таких дремучих версий, что уж и не помню с каких именно)
Или же рекурсивный WITH-subquery factoring clause ? (доступен с 11g, если мне память не изменяет)
...
Рейтинг: 0 / 0
24.07.2018, 11:51
    #39678161
Pol.ka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение итоговых значений в иерархии
Щукина Анна, Второй вариант , с первым всё получается довольно просто , проблема именно в втором варианте
...
Рейтинг: 0 / 0
24.07.2018, 11:55
    #39678163
Pol.ka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение итоговых значений в иерархии
Elic, Спасибо но боюсь эта тема не поможет
...
Рейтинг: 0 / 0
24.07.2018, 15:03
    #39678343
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение итоговых значений в иерархии
Pol.kaElic, Спасибо но боюсь эта тема не поможет

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

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


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