powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Иерархические (рекурсивные) запросы
17 сообщений из 17, страница 1 из 1
Иерархические (рекурсивные) запросы
    #39674607
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В иерархическом запросе надо вывести сумму по строкам для подчинённых ( т.е без начальника ) , не получается это сделать , не могли бы вы подсказать как это сделать.
Заранее благодарю.
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39674608
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pol.kaВ иерархическом запросе надо вывести сумму по строкам для подчинённых ( т.е без начальника ) , не получается это сделать , не могли бы вы подсказать как это сделать.
Заранее благодарю.
Для начала покажи что у тебя получилось и тестовые данные в виде
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with tabname(col1,col2,...) as (
select x1,y2,z3 from dual union all
....
select xN,yN,zN from dual
)
select ...
from tabname
...



И в правильном оформлении
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39674618
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос такой
SELECT lpad(' ', 3*level)||Boss as Tree,LEVEL , SYS_CONNECT_BY_PATH(name, '/') AS PATH FROM my_table2 a
start with id=1 connect by prior id=Boss
ORDER SIBLINGS BY NAME
На фото вывод
Нужно добавить столбец с суммой зарплаты подчинённых без босса
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675032
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необходимо подсчитать Сумму дочерних строк каждого уровня рекурсии без корневой строки
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675114
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pol.ka,

1. Вас просили сделать тестовые данные, а Вы их не сделали
2. Вас спросили что получилось у Вас и что не получается - Вы так-же не ответили (т.е. в Вашем ответе со скрином нет суммы, нет тестовой таблицы, нет суммы которую Вы получили и того что Вы хотели получить)

т.о. Вы пока не сделали ничего чтобы хотя-бы разогнать туман в моем хрустальном шаре.
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675124
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pol.kaЗапрос такой
SELECT lpad(' ', 3*level)||Boss as Tree,LEVEL , SYS_CONNECT_BY_PATH(name, '/') AS PATH FROM my_table2 a
start with id=1 connect by prior id=Boss
ORDER SIBLINGS BY NAME
выдаёт ошибку ORA-00942: table or view does not exist
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675132
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица


CREATE TABLE my_table2 (id number, Boss number, NAME VARCHAR2(50) , zp NUMBER );


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 (22, 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
Иерархические (рекурсивные) запросы
    #39675136
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pol.ka,

Ok. пункт 1 пройден

Код: 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.
with  my_table2 (id, Boss, NAME, zp) as (
select 1 ,0, 'Pushkin', 1 from dual union all
select 2, 1, 'Gvidon' , 2 from dual union all
select 3, 1, 'Rzevsii', 3 from dual union all
select 4, 3, 'Dubrovski', 5 from dual union all
select 5, 4, 'Petr1', 4 from dual union all
select 6, 5, 'Nevski', 4 from dual union all
select 7, 3,'Ruslan', 2 from dual union all
select 22, 0, 'Ludmila' , 2 from dual union all
select 8, 7, 'Gaivata', 4 from dual union all
select 9, 2, 'Gendalf', 5 from dual union all
select 10, 9, 'Sofia' , 4 from dual union all
select 11, 10, 'Alice' , 5 from dual union all
select 12, 2, 'Santa' , 11 from dual union all
select 13, 14, 'Satana' , 4 from dual union all
select 14, 0, 'God' , 2 from dual union all
select 15, 14, 'Michael' , 5 from dual union all
select 16, 13, 'Azzazel' , 3 from dual union all
select 17, 14, 'Begemot' , 4 from dual union all
select 18, 17, 'Voland' , 5 from dual union all
select 19, 18, 'Maste_r' , 5 from dual union all
select 20, 14, 'Berlioz' , 1 from dual union all
select 21, 1, 'Raskolnikov' , 6 from dual union all
select 22, 21, 'Marmeladov' , 6 from dual)

SELECT lpad(' ', 3*level)||Boss as Tree,LEVEL , SYS_CONNECT_BY_PATH(name, '/') AS PATH FROM my_table2 a 
start with id=1 connect by prior id=Boss
ORDER SIBLINGS BY NAME



Переходим к пункту 2 что за суммы получились и какие надо получить?
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675230
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

мб это нужно? 1833945
Код: 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.
with  my_table2 (id, Boss, NAME, zp) as (
select 1 ,0, 'Pushkin', 1 from dual union all
select 2, 1, 'Gvidon' , 2 from dual union all
select 3, 1, 'Rzevsii', 3 from dual union all
select 4, 3, 'Dubrovski', 5 from dual union all
select 5, 4, 'Petr1', 4 from dual union all
select 6, 5, 'Nevski', 4 from dual union all
select 7, 3,'Ruslan', 2 from dual union all
select 8, 7, 'Gaivata', 4 from dual union all
select 9, 2, 'Gendalf', 5 from dual union all
select 10, 9, 'Sofia' , 4 from dual union all
select 11, 10, 'Alice' , 5 from dual union all
select 12, 2, 'Santa' , 11 from dual union all
select 13, 14, 'Satana' , 4 from dual union all
select 14, 0, 'God' , 2 from dual union all
select 15, 14, 'Michael' , 5 from dual union all
select 16, 13, 'Azzazel' , 3 from dual union all
select 17, 14, 'Begemot' , 4 from dual union all
select 18, 17, 'Voland' , 5 from dual union all
select 19, 18, 'Maste_r' , 5 from dual union all
select 20, 14, 'Berlioz' , 1 from dual union all
select 21, 1, 'Raskolnikov' , 6 from dual union all
select 22, 21, 'Marmeladov' , 6 from dual)
select  lpad(' ',2 * (level - 1)) || name ename,
         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 id=1
   connect by prior id=Boss
   ORDER SIBLINGS BY NAME
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675436
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagor, Примерно , спасибо , теперь осталось только убрать
имя Начальников из запроса
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675469
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pol.ka,

В процессе постановки задачи Вы имеете уровень БОГ.

Кто в вашем примере - Начальник?
До сих пор не понятно какие суммы Вы хотели увидеть.
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675479
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL, С суммами уже все решилось , осталось только из запроса (SELECT lpad(' ', 3*level)||NAME as Tree ,LEVEL , SYS_CONNECT_BY_PATH(name, '/') AS PATH FROM my_table2 a
start with id=1 connect by prior id=Boss
ORDER SIBLINGS BY NAME ) в третьем столбце убрать имя которое соответствует ему в первой строке , точнее просто убрать его имя
, если PUshkin то убрать его имя в 3 столбце его строки и т.д.
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675493
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pol.kaMaximaXXL, С суммами уже все решилось , осталось только из запроса (SELECT lpad(' ', 3*level)||NAME as Tree ,LEVEL , SYS_CONNECT_BY_PATH(name, '/') AS PATH FROM my_table2 a
start with id=1 connect by prior id=Boss
ORDER SIBLINGS BY NAME ) в третьем столбце убрать имя которое соответствует ему в первой строке , точнее просто убрать его имя
, если PUshkin то убрать его имя в 3 столбце его строки и т.д.

Нет, уровень уходит в Старший БОГ.

убрать строчку
Код: plsql
1.
where level != 1


убрать его имя в 3 столбце его строки
Код: plsql
1.
decode(level,1,null,SYS_CONNECT_BY_PATH(name, '/')) AS PATH,
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675496
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL, Спасибо за подсказку , я имел ввиду что для каждой строки надо убрать её имя в третьем столбце , для пушкина это пушкин , для гвидона это гвидон и т.д.

1 Sofia /Pushkin/Gvidon/Gendalf/

Без Софии
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675504
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pol.ka,

Ну если совсем влоб, просто откусить substr or regexp_substr
Код: plsql
1.
substr(SYS_CONNECT_BY_PATH(name, '/'),1,instr(SYS_CONNECT_BY_PATH(name, '/'),'/',-1)) AS PATH,
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675510
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pol.ka,

Можно так
Код: plsql
1.
SYS_CONNECT_BY_PATH(prior name, '/') as PATH
...
Рейтинг: 0 / 0
Иерархические (рекурсивные) запросы
    #39675752
Pol.ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL, Всё вышло чудесно , крайне благодарен.
Теперь задача сложнее , необходимо получить всё тоже самое только через WIth
Вот что вышло у меня


with rec(lvl, ID , NAME , zp , boss ) as
(
select 1 lvl, ID , NAME , ZP , boss
from my_table2
union ALL
select r.lvl + 1, t.id , t.NAME , t.ZP , t.boss from my_table2 t join rec r on t.boss = r.id
) select lvl, lpad(' ', 10*lvl)||NAME , rpad(' ', (lvl - 1) * 3, ' ') || id as ID , NAME , ZP , boss from rec

При попытке ORDER SIBLNGS не работает и также надо работать с суммой
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Иерархические (рекурсивные) запросы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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