Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Суммирование по дереву, получение итога / 7 сообщений из 7, страница 1 из 1
02.02.2017, 01:26
    #39396859
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Суммирование по дереву, получение итога
Здравствуйте
как реализовать иерархический запрос как на рисунке
...
Рейтинг: 0 / 0
02.02.2017, 04:25
    #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
02.02.2017, 07:23
    #39396905
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Суммирование по дереву, получение итога
Xdredd.vl,

спасибо
...
Рейтинг: 0 / 0
02.02.2017, 12:59
    #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
03.02.2017, 01:43
    #39397710
Xdredd.vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Суммирование по дереву, получение итога
Бакыт,

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


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

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


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

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

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

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

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

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


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