Как я могу добавить условие для общего объема продаж в месяц для определенной категории

#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. Отлично, именно этого я и хотел, спасибо за вашу помощь и спасибо за ваш комментарий. вы правы, скидки для второго клиента нет