powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Суммирование строк по условию
4 сообщений из 4, страница 1 из 1
Суммирование строк по условию
    #39297990
C00LM4N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Никак не могу сообразить, можно ли как-либо просто просуммировать строки так, чтобы value от детей добавлялось к value родителей. Пока что думаю делать конвейерную фукнцию, хотя есть сомнения, что это можно просто реализовать через неё.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with source_table as (
select '1' as uu, 5 as value from dual
union
select '1/1.1' as uu, 10 as value from dual
union
select '1/1.1/1.1.1' as uu, 15 as value from dual
union
select '2' as uu, 7 as value from dual
union
select '2/2.1' as uu, 12 as value from dual
)
select * from source_table



Поясню. Нужно, чтобы value от 1/1.1/1.1.1 добавилось и к 1/1.1, и к 1. А также чтобы value от 1/1.1 добавилось к 1. Со второй парой (2*) то же самое. При этом, чтобы строки детей не исчезали - просто все значения прибавлялись к родителям.
Также, если есть только строка/строки "1/1.1/1.1.1", но нет "1" и/или "1/1.1", то создались и строки "1" и "1/1.1" с их суммами.
...
Рейтинг: 0 / 0
Суммирование строк по условию
    #39298013
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
select root_id, sum(value) from (select connect_by_root uu as root_id, …) group by root_id;
...
Рейтинг: 0 / 0
Суммирование строк по условию
    #39298037
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не заморачиваясь:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with source_table as (
select /*+ materialize */ '1' as uu, 5 as value from dual
union select '1/1.1' as uu, 10 as value from dual
union select '1/1.1/1.1.1' as uu, 15 as value from dual
union select '2' as uu, 7 as value from dual
union select '2/2.1' as uu, 12 as value from dual
)
select min(uu) uu, sum(value) s_val 
  from source_table t
group by grouping sets(
       (regexp_substr(uu||'/','([^/]+/){1}'))
     , (regexp_substr(uu||'/','([^/]+/){2}'))
     , (regexp_substr(uu||'/','([^/]+/){3}'))
     , (regexp_substr(uu||'/','([^/]+/){4}'))
)
having max(uu) like min(uu)||'%'
order by uu
...
Рейтинг: 0 / 0
Суммирование строк по условию
    #39298277
C00LM4N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю!
Второй вариант работает почти как надо, а с CONNECT BY надо разобраться обязательно.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Суммирование строк по условию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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