powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывод отчета
11 сообщений из 11, страница 1 из 1
Вывод отчета
    #39910041
KrisssMrisss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица:
Код: plsql
1.
2.
3.
4.
id_покупателя NUMBER
сколько_потратил_на услугу NUMBER(15,2)
название_услуги  VARCHAR2(4000)
тип услуги(б- базовая, д- дополнительная)


Хранится информация:
Код: plsql
1.
2.
3.
4.
5.
6.
1| 15  | услуга1| б
1| 20  | услуга2| б
1| 200 | услуга3| д
2| 60  |услуга4 | б
2| 150 |услуга5 | д
2| 200 | услуга3| д



Нужно вывести id_покупателя, сумма потраченная на базовые услуги; сумма потраченная на дополнительные услуги; сумма потраченная на все услуги(для каждого покупателя); объединение поля название_услуги через запятую при условии, что услуга базовая
...
Рейтинг: 0 / 0
Вывод отчета
    #39910048
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KrisssMrisss,

оффтоп"А вы, молодой человек, наденьте штаны и ко мне с зачеткой! Потом - в армию! Годы у вас подходящие!"(с)
...
Рейтинг: 0 / 0
Вывод отчета
    #39910116
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KrisssMrisss
Нужно
Дорогуша, а ты попробуй убедить нас, что ты хоть чего-то стоишь своими попытками продвижения к цели. Не можешь? - Тогда тебе в форум "Работа". Только там ты можешь видать в гробу "эти сраные эскюэли", если конечно же у тебя есть спонсор.
...
Рейтинг: 0 / 0
Вывод отчета
    #39910154
KrisssMrisss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

пыталась решить это так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT  ID_покупателя,
 sum(CASE тип_услуги WHEN 'б' THEN сколько_потратил_на_услугу END) AS сумма баз услуги,
 sum(CASE тип_услуги WHEN 'д' THEN сколько_потратил_на_услугу END) AS сумма доп услуги,
 SUM(сколько_потратил_на_услугу) AS сумма всех услуг,
decode(тип_услуги, 'б', LISTAGG(название_услуги ,',') WITHIN GROUP(order by название_услуги )) as названия_услуг
FROM таблица1
GROUP BY ID_покупателя,тип_услуги;



Если писать так, то неправильно выводится сумма всех услуг(дробится на несколько строк из-за тип_услуги в group by), а если убрать тип_услуги оттуда, то выводит ошибку, тк он используется в decode. Не понимаю как это исправить..
...
Рейтинг: 0 / 0
Вывод отчета
    #39910158
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KrisssMrisss
сумма потраченная на базовые услуги; сумма потраченная на дополнительные услуги; сумма потраченная на все услуги(для каждого покупателя)
может быть вам посмотреть в сторону GROUPING SETS ?
https://www.oracletutorial.com/oracle-basics/oracle-grouping-sets/
https://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF55333
...
Рейтинг: 0 / 0
Вывод отчета
    #39910159
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой, че-то я совсем тупанул
...
Рейтинг: 0 / 0
Вывод отчета
    #39910163
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
напоследок в уходящем году
в качестве подарка

заменим хрень для удобоваримости:
id_покупателя NUMBER = id
сколько_потратил_на услугу NUMBER(15,2) = val
название_услуги VARCHAR2(4000) = serv_name
тип услуги(б- базовая, д- дополнительная) = serv_type

вариант, при условии, что на id индекс:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select 
t0.id,
(select sum(t1.val) from tab t1 where t1.id = t0.id and t1.serv_type = 'б') as sum_serv_base,
(select sum(t2.val) from tab t2 where t2.id = t0.id and t2.serv_type = 'д') as sum_serv_add,
(select sum(t3.val) from tab t3 where t3.id = t0.id) as sum_serv_all,
(select LISTAGG(t4.serv_name ,',') WITHIN GROUP(order by t4.serv_name) from tab t4 where t4.id = t0.id and serv_type = 'б') as serv_list
from tab t0
group by t0.id



с наступающим
...
Рейтинг: 0 / 0
Вывод отчета
    #39910165
KrisssMrisss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fogel, пробовала так, вариант с селектами не подходит, нужно решить каким-то другим
...
Рейтинг: 0 / 0
Вывод отчета
    #39910168
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KrisssMrisss,

просто надо decode перенести внутрь listagg
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with
x as (
select 1 "id_покупателя", 15 "сколько_потратил_на услугу", 'услуга1' "название_услуги", 'б' "тип услуги" from dual union all
select 1, 20, 'услуга2', 'б' from dual union all
select 1, 200, 'услуга3', 'д' from dual union all
select 2, 60, 'услуга4', 'б' from dual union all
select 2, 150, 'услуга5', 'д' from dual union all
select 2, 200, 'услуга3', 'д' from dual
)
select
          "id_покупателя",
          sum(case "тип услуги" when 'б' then "сколько_потратил_на услугу" end) as "сколько_потратил_на базые услуги",
          sum(case "тип услуги" when 'д' then "сколько_потратил_на услугу" end) as "сколько_потратил_на дополнительные услуги",
          sum("сколько_потратил_на услугу") as "сколько_потратил_на все услуги",
          listagg(case "тип услуги" when 'б' then "название_услуги" end, ',') within group (order by "название_услуги") as "название_услуги"
     from x
     group by
          "id_покупателя"

...
Рейтинг: 0 / 0
Вывод отчета
    #39910176
KrisssMrisss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--Eugene--, сработало! Спасибо большое!!!
...
Рейтинг: 0 / 0
Вывод отчета
    #39910180
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--
ой, че-то я совсем тупанул
Ты проститут?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывод отчета
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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