powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Суммирование по дереву, получение итога
7 сообщений из 7, страница 1 из 1
Суммирование по дереву, получение итога
    #39396859
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте
как реализовать иерархический запрос как на рисунке
...
Рейтинг: 0 / 0
Суммирование по дереву, получение итога
    #39396891
Xdredd.vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бакыт, ну в первом приближении как-то так ():
Код: 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.
-- Create table
create table TREE_TAB
(
  id     NUMBER not null,
  par_id NUMBER,
  name   VARCHAR2(5) not null,
  amnt   NUMBER not null
);

Insert Into tree_tab (id, par_id, Name, amnt) values (1,null,'a',100);
Insert Into tree_tab (id, par_id, Name, amnt) values (2,null,'b',100);
Insert Into tree_tab (id, par_id, Name, amnt) values (3,1,'aa',10);
Insert Into tree_tab (id, par_id, Name, amnt) values (4,1,'ab',10);
Insert Into tree_tab (id, par_id, Name, amnt) values (4,1,'ab',10);
Insert Into tree_tab (id, par_id, Name, amnt) values (5,1,'ac',10);
Insert Into tree_tab (id, par_id, Name, amnt) values (6,2,'ba',1);
Insert Into tree_tab (id, par_id, Name, amnt) values (7,2,'bb',1);
Insert Into tree_tab (id, par_id, Name, amnt) values (8,4,'aba',1);
Insert Into tree_tab (id, par_id, Name, amnt) values (9,4,'abb',1);

With a As
 (Select row_number() over(Order By 1) rn, Level, connect_by_isleaf leaf,
				 t.id, t.par_id, t.name, t.amnt,
				 (Select Sum(amnt)
						 From tree_tab x
					 Connect By x.par_id = Prior x.id
						Start With x.id = t.id) sum_sub
		From tree_tab t
	Connect By t.par_id = Prior t.id
	 Start With t.par_id Is Null),
b As
 (Select Name, amnt, id, par_id
		From a
	Union All
	Select 'Итого по ' || Name Name, sum_sub, Null id, id par_id
		From a
	 Where leaf = 0)

Select Name, amnt
	From b
Connect By b.par_id = Prior b.id
 Start With b.par_id Is Null
 Order Siblings By id Nulls Last



NAMEAMNTa100aa10ab10aba1abb1Итого по ab12ac10Итого по a132b100ba1bb1Итого по b102
...
Рейтинг: 0 / 0
Суммирование по дереву, получение итога
    #39396905
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xdredd.vl,

спасибо
...
Рейтинг: 0 / 0
Суммирование по дереву, получение итога
    #39397175
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще 1 момент мне надо вытащить родителей узла если есть данные т.е.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
ID,NAME,PID
1,	АКТИВ,null	
2,	Касса,	1
3,	>>Деньги в кассе,	2
4,	>>Деньги в пути,	2
5,	Корр счет,	1
6,	>>Тиньков банк,	5




например

Код: plsql
1.
2.
ID,AMOUNT
3,5000



то, надо только
Код: plsql
1.
2.
3.
4.
ID,NAME,PID,AMOUNT
1,	АКТИВ,null, 0	    
2,	Касса,	1,0
3,	>>Деньги в кассе,	2,5000




узел корр счет и Тиньков банк исключить
...
Рейтинг: 0 / 0
Суммирование по дереву, получение итога
    #39397710
Xdredd.vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бакыт,

автореще 1 момент мне надо вытащить родителей узла если есть данные т.е.


Что-то набор слов какой-то ...
ничего не понятно.
...
Рейтинг: 0 / 0
Суммирование по дереву, получение итога
    #39397953
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xdredd.vlБакыт,

автореще 1 момент мне надо вытащить родителей узла если есть данные т.е.


Что-то набор слов какой-то ...
ничего не понятно.
у меня есть таблица иерархическая план счетов из 180 записей примерно ,а остатки может быть где то половина ,поэтому хочу исключить те узлы по которым нет данных
...
Рейтинг: 0 / 0
Суммирование по дереву, получение итога
    #39399003
Xdredd.vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бакыт, прости, но ты сам читаешь что пишешь ?

1) у меня есть таблица иерархическая план счетов из 180 записей примерно ,
2) а остатки может быть где то половина ,
3) поэтому хочу исключить те узлы по которым нет данных

не обижайся, но это полный бред (тебе он понятен, так как ты знаешь о чем говоришь, но для другого человека - это просто набор слабо связанных слов)

Пытаюсь догадаться:

1) иерархических таблиц не бывает (видимо имеется иерархия данных в виде "{узел},{родительский_узел},{summa}")
2) в части этих записей {summa} = 0
3) Нужно исключить все записи где сумма полей {summa} всех "дочерних" узлов = 0 ?

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


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