#database #oracle #subquery #case-when
#База данных #Oracle #подзапрос #случай-когда
Вопрос:
Предположим, что есть таблица, как показано ниже. структура
select Year, Month , customer, Category, Amount
from claim
Я хочу применять скидку за каждый месяц, как показано в таблице (зеленые столбцы):
- если общий объем продаж ‘Cus X’ для категорий брендов и общих категорий в январе превышает 15000, то примените скидку только для категории ‘Brand’, равную 2%
- если оно больше 20000, примените скидку в размере 3%
и то же самое для других месяцев и клиентов.
Возможно ли это сделать в SQL с помощью подзапроса или некоторых функций, которые могут помочь?
Пожалуйста, посоветуйте
Комментарии:
1. Для custY, month = 2 и year = 2020, скидки вообще не должно быть, так как общий объем продаж за этот месяц для этого клиента составляет 13900.
Ответ №1:
Вы можете использовать ase .. when
оператор c и аналитическую функцию следующим образом:
select Year, Month , customer, Category, Amount,
Case when category = 'Brand'
then
Case when total_sales > 15000 then '2%'
When total_sales > 20000 then '3%'
End
End as disc,
Case when category = 'Brand'
then
Case when total_sales > 15000 then 2*amount/100
When total_sales > 20000 then 3*amount/100
End
End disc_amount
From
(select Year, Month , customer, Category, Amount,
sum(case when category in ('Brand', 'Generic') then amount else 0 end)
over (partition by year, month, customer) as total_sales
from claim)
Комментарии:
1. Отлично, именно этого я и хотел, спасибо за вашу помощь и спасибо за ваш комментарий. вы правы, скидки для второго клиента нет