Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Суммирование по дереву, получение итога  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 753
Здравствуйте
как реализовать иерархический запрос как на рисунке

К сообщению приложен файл. Размер - 48Kb
2 фев 17, 01:26    [20171712]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование по дереву, получение итога  [new]
Xdredd.vl
Member

Откуда: где-то у Тихого океана
Сообщений: 34
Бакыт, ну в первом приближении как-то так ():
-- 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


NAMEAMNT
a100
aa10
ab10
aba1
abb1
Итого по ab12
ac10
Итого по a132
b100
ba1
bb1
Итого по b102
2 фев 17, 04:25    [20171766]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование по дереву, получение итога  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 753
Xdredd.vl,

спасибо
2 фев 17, 07:23    [20171803]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование по дереву, получение итога  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 753
еще 1 момент мне надо вытащить родителей узла если есть данные т.е.
ID,NAME,PID
1,	АКТИВ,null	
2,	Касса,	1
3,	>>Деньги в кассе,	2
4,	>>Деньги в пути,	2
5,	Корр счет,	1
6,	>>Тиньков банк,	5



например

ID,AMOUNT
3,5000


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



узел корр счет и Тиньков банк исключить
2 фев 17, 12:59    [20173198]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование по дереву, получение итога  [new]
Xdredd.vl
Member

Откуда: где-то у Тихого океана
Сообщений: 34
Бакыт,

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


Что-то набор слов какой-то ...
ничего не понятно.
3 фев 17, 01:43    [20175715]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование по дереву, получение итога  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 753
Xdredd.vl
Бакыт,

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


Что-то набор слов какой-то ...
ничего не понятно.

у меня есть таблица иерархическая план счетов из 180 записей примерно ,а остатки может быть где то половина ,поэтому хочу исключить те узлы по которым нет данных
3 фев 17, 11:29    [20176600]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование по дереву, получение итога  [new]
Xdredd.vl
Member

Откуда: где-то у Тихого океана
Сообщений: 34
Бакыт, прости, но ты сам читаешь что пишешь ?

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

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

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

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

Оформи вопрос так как я дал ответ(во втором посте), и все станет понятно.
6 фев 17, 04:31    [20182532]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить