Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывод отчета / 11 сообщений из 11, страница 1 из 1
30.12.2019, 19:06
    #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
30.12.2019, 19:39
    #39910048
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод отчета
KrisssMrisss,

оффтоп"А вы, молодой человек, наденьте штаны и ко мне с зачеткой! Потом - в армию! Годы у вас подходящие!"(с)
...
Рейтинг: 0 / 0
31.12.2019, 07:52
    #39910116
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод отчета
KrisssMrisss
Нужно
Дорогуша, а ты попробуй убедить нас, что ты хоть чего-то стоишь своими попытками продвижения к цели. Не можешь? - Тогда тебе в форум "Работа". Только там ты можешь видать в гробу "эти сраные эскюэли", если конечно же у тебя есть спонсор.
...
Рейтинг: 0 / 0
31.12.2019, 12:27
    #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
31.12.2019, 12:42
    #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
31.12.2019, 12:44
    #39910159
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод отчета
ой, че-то я совсем тупанул
...
Рейтинг: 0 / 0
31.12.2019, 12:56
    #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
31.12.2019, 13:00
    #39910165
KrisssMrisss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод отчета
Fogel, пробовала так, вариант с селектами не подходит, нужно решить каким-то другим
...
Рейтинг: 0 / 0
31.12.2019, 13:08
    #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
31.12.2019, 13:40
    #39910176
KrisssMrisss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод отчета
--Eugene--, сработало! Спасибо большое!!!
...
Рейтинг: 0 / 0
31.12.2019, 13:50
    #39910180
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод отчета
--Eugene--
ой, че-то я совсем тупанул
Ты проститут?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывод отчета / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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