С предложением в sql - PullRequest
       2

С предложением в sql

0 голосов
/ 20 февраля 2019
with WEEKLY_PERCENT_SOLD AS (
      SELECT ROUND(count(AMOUNT_SOLD) * 100/ SUM(amount_sold), 2) TOTAL
        FROM SALES)
    SELECT (REPLACE (REPLACE(p.prod_desc,'this is the famous',''), 'size XXXL','size 14.00')|| ': PRODUCT_ID=' || p.prod_id ) "PRODUCT_DESCRIPTION",
            SUM(s.AMOUNT_SOLD) "TOTAL_AMOUNT_SOLD",
            CASE TO_CHAR( t.CALENDAR_WEEK_NUMBER) WHEN '13' THEN 'First week'
                                                  WHEN '14' THEN 'Second week'
                                                  WHEN '15' THEN 'Third week'
                                                  WHEN '16' THEN 'Fourth week'
                                                  WHEN '17' THEN 'Fifth week'               
            END "WEEK_IN_MONTH"
      FROM sh.PRODUCTS p INNER JOIN sh.SALES s 
                             ON p.prod_id=s.prod_id
                         INNER JOIN TIMES t 
                             ON s.time_id=t.time_id
       WHERE p.prod_id IN (300,10,540)
             AND TO_CHAR(t.time_id,'dd-MON-yy') LIKE '__-APR-00' 
             AND s.amount_sold>0
       GROUP BY p.PROD_DESC,p.prod_desc, 
                calendar_week_number,
                t.CALENDAR_MONTH_NUMBER,
                (REPLACE (REPLACE(p.prod_desc,'this is the famous',''), 'size 
                XXXL','size 14.00')|| ': PRODUCT_ID=' || p.prod_id ),
                CASE TO_CHAR( t.CALENDAR_WEEK_NUMBER)
                  WHEN '13' THEN 'First week' 
                  WHEN '14' THEN 'Second week'
                  WHEN '15' THEN 'Third week' 
                  WHEN '16' THEN 'Fourth week'
                  WHEN '17' THEN 'Fifth week' 
                END
  ORDER BY PRODUCT_DESCRIPTION, t.CALENDAR_WEEK_NUMBER;

Добавьте дополнительный столбец, чтобы вычислить процент от суммы продаж за данную неделю месяца от общей суммы продаж за месяц.Укажите имя для столбца Weekly_percent_sold.Отформатируйте значения в процентах, чтобы они выводили ровно 2 символа после запятой.

1 Ответ

0 голосов
/ 20 февраля 2019

Это должно помочь вам:

-- sample data
with your_query(PRODUCT_DESCRIPTION, TOTAL_AMOUNT_SOLD, WEEK_IN_MONTH) as (
    select 'size 14:00: PRODUCT_ID=PQR', 7000, '1 week' from dual union all
    select 'size 14:00: PRODUCT_ID=PQR', 5100, '2 week' from dual union all
    select 'size 14:00: PRODUCT_ID=PQR', 7800, '3 week' from dual union all
    select 'size 14:00: PRODUCT_ID=PQR', 4900, '4 week' from dual union all
    select 'size 14:00: PRODUCT_ID=PQR', 6200, '5 week' from dual union all
    select 'size 14:00: PRODUCT_ID=XYZ', 1000, '1 week' from dual union all
    select 'size 14:00: PRODUCT_ID=XYZ', 1100, '2 week' from dual union all
    select 'size 14:00: PRODUCT_ID=XYZ',  800, '3 week' from dual union all
    select 'size 14:00: PRODUCT_ID=XYZ',  900, '4 week' from dual union all
    select 'size 14:00: PRODUCT_ID=XYZ', 1200, '5 week' from dual )
-- end of sampe data
select t.*, 
       to_char(100 * TOTAL_AMOUNT_SOLD 
               / sum(TOTAL_AMOUNT_SOLD) over (partition by PRODUCT_DESCRIPTION), '999.00') percent_1,
       to_char(100 * TOTAL_AMOUNT_SOLD 
               / sum(TOTAL_AMOUNT_SOLD) over (), '999.00') percent_2
  from your_query t

Результат:

PRODUCT_DESCRIPTION        TOTAL_AMOUNT_SOLD WEEK_IN_MONTH PERCENT_1 PERCENT_2
-------------------------- ----------------- ------------- --------- ---------
size 14:00: PRODUCT_ID=PQR              7000 1 week          22.58     19.44
size 14:00: PRODUCT_ID=PQR              5100 2 week          16.45     14.17
size 14:00: PRODUCT_ID=PQR              7800 3 week          25.16     21.67
size 14:00: PRODUCT_ID=PQR              4900 4 week          15.81     13.61
size 14:00: PRODUCT_ID=PQR              6200 5 week          20.00     17.22
size 14:00: PRODUCT_ID=XYZ              1000 1 week          20.00      2.78
size 14:00: PRODUCT_ID=XYZ              1100 2 week          22.00      3.06
size 14:00: PRODUCT_ID=XYZ               800 3 week          16.00      2.22
size 14:00: PRODUCT_ID=XYZ               900 4 week          18.00      2.50
size 14:00: PRODUCT_ID=XYZ              1200 5 week          24.00      3.33

Percent_1 показывает процент для каждого продукта в отдельности, Percent_2 для всех продуктов.В предложении with, в которое я помещаю примеры данных, вы помещаете туда свой рабочий запрос.

В вашем коде есть несколько проблем, но вы не спрашиваете об этом.

Надеюсь, это поможет:)


Редактировать: Вот моя попытка полного кода.У меня нет доступа к вашим данным, я не могу их проверить, так что это может привести к опечатке, но я надеюсь, что все в порядке.Я также использовал функцию ratio_to_report вместо деления, но это необязательно, вы можете разделить сумму на сумму.

with t as (
  -- here is your current query
  SELECT (REPLACE (REPLACE(p.prod_desc,'this is the famous',''), 'size XXXL','size 14.00')|| ': PRODUCT_ID=' || p.prod_id ) PRODUCT_DESCRIPTION,
         SUM(s.AMOUNT_SOLD) TOTAL_AMOUNT_SOLD,
         t.CALENDAR_WEEK_NUMBER
    FROM sh.PRODUCTS p 
    JOIN sh.SALES s ON p.prod_id=s.prod_id
    JOIN TIMES t ON s.time_id=t.time_id
    WHERE p.prod_id IN (300,10,540) 
      AND TO_CHAR(t.time_id,'dd-MON-yy') LIKE '__-APR-00' 
      AND s.amount_sold>0
    GROUP BY p.PROD_DESC,p.prod_desc, calendar_week_number, t.CALENDAR_MONTH_NUMBER,
          (REPLACE (REPLACE(p.prod_desc,'this is the famous',''), 'size XXXL','size 14.00')|| ': PRODUCT_ID=' || p.prod_id ))
  -- end of your query  
select PRODUCT_DESCRIPTION, TOTAL_AMOUNT_SOLD, 
       CASE TO_CHAR(t.CALENDAR_WEEK_NUMBER) WHEN '13' THEN 'First week'
                                            WHEN '14' THEN 'Second week'
                                            WHEN '15' THEN 'Third week'
                                            WHEN '16' THEN 'Fourth week'
                                            WHEN '17' THEN 'Fifth week'               
       END WEEK_IN_MONTH,
       to_char(100 * ratio_to_report(TOTAL_AMOUNT_SOLD) 
         over (partition by PRODUCT_DESCRIPTION), '999.00') percent1
  from t
  order by PRODUCT_DESCRIPTION, CALENDAR_WEEK_NUMBER
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...