powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SQL запрос в ORACLE 8.1.7
13 сообщений из 13, страница 1 из 1
SQL запрос в ORACLE 8.1.7
    #32088378
Dimon94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня возник вот какой вопрос (чисто практический)

Никто не пробовал получить следующие табличные данные средствами стандартного SQL:

Дата Сумма1 Сумма2 Сумма3

где сумма3 некий результат за каждую дату (например, остаток).

Я же хочу получить столбец, каждая запись которого будет аккумулировать значения сумм, находящиеся выше данной точки (например даты) Таким образом формируются накопительные суммы за каждую дату.
...
Рейтинг: 0 / 0
SQL запрос в ORACLE 8.1.7
    #32088407
create table test_table(
begin_date date,
sum number(3));
declare
i integer;
begin
for i in 1..100
loop
insert into test_table values(sysdate - 100 + i, 100 + i);
end loop;
end;
/
select
t.begin_date,
(select sum(tt.sum) from test_table tt where tt.begin_date < t.begin_date)
from
test_table t;

Connected to Oracle9i Enterprise Edition Release 9.0.1.1.1
Connected as chtpz

SQL>

Table created

PL/SQL procedure successfully completed

BEGIN_DATE (SELECTSUM(TT.SUM)FROMTEST_TAB
----------- ------------------------------
02.10.2002
03.10.2002 101
04.10.2002 203
05.10.2002 306
06.10.2002 410
07.10.2002 515
08.10.2002 621
09.10.2002 728
10.10.2002 836
11.10.2002 945
12.10.2002 1055
13.10.2002 1166
14.10.2002 1278
15.10.2002 1391
16.10.2002 1505
17.10.2002 1620
18.10.2002 1736
19.10.2002 1853
20.10.2002 1971
21.10.2002 2090

И так далее................
...
Рейтинг: 0 / 0
SQL запрос в ORACLE 8.1.7
    #32088408
ksukhonosenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю, что для этого надо либо пользоваться циклом либо подбивать итоги за период, отдельно.

Рассуждение:
Если делать стандартным SQL - то неявный курсор должен будет "видеть" и учитывать в своей работе изменения, внесенные собой же (накопленные суммы) - по-моему так не бывает. Значит SQL отпадает.

Так или не так?
...
Рейтинг: 0 / 0
SQL запрос в ORACLE 8.1.7
    #32088440
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот на Oracle 9i (может и на 8i), но скорее всего на Enterprise Edition такая накопительная сумма:

Код: plaintext
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.
create table sum_example (
    dt date
  , xy number( 9 )
)
/

begin
  dbms_random.seed( 1234567890 );
  for i in  1 .. 100  loop
    for j in  1 .. 10  loop
      insert into sum_example(dt, xy)
        values (sysdate + i, dbms_random.value *  100 );
    end loop;
  end loop;
commit;
end;
/

select dt
    , xy
    , sum(xy) over (
        partition by trunc(dt) order by dt
        rows between unbounded preceding and current row
      ) s
from sum_example
/
...
Рейтинг: 0 / 0
SQL запрос в ORACLE 8.1.7
    #32088551
Mergen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если имеется такая задача.
Иерархическая структура:

Имется продовец, у него начальник. Нужно вывести дерево, где результатьм вывода будет Продовец Заработок. У начальника Заработок=Его заработок+ заработок всех его подчененных. Как в сетевом маркетенге.
...
Рейтинг: 0 / 0
SQL запрос в ORACLE 8.1.7
    #32088558
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример :
имеется 2 таблицы (можно 1 ничего не изменяет)
структура:
Код: plaintext
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.
create table txt_nodes
(node_id   number,
 node_name varchar2( 20 ),
 koef      number
);

create table a_tree (
node_id number,
root_id number,
constraint pk_a_tree primary key (node_id)
);

insert into txt_nodes values( 1 ,  'node one',  10 );
insert into txt_nodes values( 2 ,  'node two',  10 );
insert into txt_nodes values( 3 ,  'node three',  10 );
insert into txt_nodes values( 4 ,  'node four',  10 );
.....

SQL> select lpad('.',(level- 1 )* 2 ,'.') || to_char(node_id) nodes 
   2   from a_tree
   3   connect by prior node_id=root_id
   4   start with root_id= 0 ;

NODES
 ------------------------------
 
 1 
.. 2 
.... 5 
.... 6 
.. 3 
.... 7 
...... 13 
...... 14 
.... 8 
.... 9 
.. 4 
.... 10 
...... 15 
...... 16 
...... 17 
.... 11 
.... 12 
...... 18 
...... 19 


т.е. дерево и справочник. Запрос быглядит примерно так:
Код: plaintext
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.
SQL> set lines  80 
SQL> set pages  9999 
SQL>
SQL> select o.node_id,
   2          o.node_name,
   3          (select sum(i.koef)
   4           from txt_nodes i
   5           where i.node_id in ( select node_id
   6                                from a_tree a
   7                                connect by prior a.node_id = a.root_id
   8                                start with a.node_id = o.node_id)
   9                    ) total
  10   from txt_nodes o;

   NODE_ID NODE_NAME                 TOTAL
 ---------- -------------------- ----------
 
          1  node one                     190 
          2  node two                      30 
          3  node three                    60 
          4  node four                     90 
          5  node five                     10 
          6  node six                      10 
          7  node seven                    30 
          8  node eight                    10 
          9  node nine                     10 
         10  node ten                      40 
         11  node eleven                   10 
         12  node twelve                   30 
         13  node thirteen                 10 
         14  node fourteen                 10 
         15  node fifteen                  10 
         16  node sixteen                  10 
         17  node seventeen                10 
         18  node eighteen                 10 
         19  node nineteen                 10 

 19  rows selected.
...
Рейтинг: 0 / 0
SQL запрос в ORACLE 8.1.7
    #32088567
Mergen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с использование аналитических функций можно нагородить такой запрос?
...
Рейтинг: 0 / 0
SQL запрос в ORACLE 8.1.7
    #32088638
Славик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
SQL запрос в ORACLE 8.1.7
    #32089178
Dimon94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для ShgGena

Пример хороший!

А если значения сумм для нижних уровней иерархии храняться в другой таблице и нужно получить такой же результат, т.е. суммы по всему дереву иерархии, которое есть некий классификатор. Другими словами есть таблица1 (дерево - node_id, root_id, node_name), таблица2 (значения сумм нижних уровней иерархии - node_id, summa).
...
Рейтинг: 0 / 0
SQL запрос в ORACLE 8.1.7
    #32089878
Dimon94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если значения сумм для нижних уровней иерархии храняться в одной таблице, а само дерево в другой таблице и нужно получить такой же результат, т.е. суммы по всему дереву иерархии, которое есть некий классификатор. Другими словами есть таблица1 (дерево - node_id, root_id, node_name), таблица2 (значения сумм нижних уровней иерархии - node_id, summa).
...
Рейтинг: 0 / 0
SQL запрос в ORACLE 8.1.7
    #32089902
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Veroiatno zapros budet:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select a.node_id,
       a.node_name,
      (select sum(i.koef)
       from txt_nodes i
       where i.node_id in ( select node_id
                            from a_tree x
                            connect by prior x.node_id = x.root_id
                            start with x.node_id = a.node_id)
      ) total
from a_tree a
connect by prior a.node_id = a.root_id
start with a.node_id =  0 ;


izmeneniya minimalnie, poskolku sum() i opredelenie spiska uzlov summirovania
mi ispolzuem nezavisimo.
v zaprose net join po tablicam, est join tolko po korrelirovannim podzaprosam
...
Рейтинг: 0 / 0
SQL запрос в ORACLE 8.1.7
    #32090754
Dimon94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за SQL суммы по узлам иерархического списка.


У меня есть еще одна заморочка, связанная с этой же темой.

есть представление, получаемое объединением дву таблиц (UNION ALL) со следующей структурой:

Дата Сумма1 Сумма2 Сумма3


Где Сумма1-значение из первой таблицы, Сумма2-значение из второй таблицы, а Сумма3-значение из первой и второй таблицы.

Как в этом случае сделать подзапросы для определения накопительной суммы за каждую дату по полю Сумма3 (с учетом значения из первой и второй таблицы как все суммы из первой таблицы до значения даты + все суммы из второй таблицы до текущего значения даты)?
...
Рейтинг: 0 / 0
SQL запрос в ORACLE 8.1.7
    #32091463
Dimon94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть я сформулировал вопрос не достаточно ясно, могу уточнить.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SQL запрос в ORACLE 8.1.7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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