Мне нужно, чтобы сумма количества_проданных была меньше 1000, и чтобы в PRODUCT_NAME были символы после каждого названия продукта, в котором есть знак "-" - PullRequest
0 голосов
/ 18 июня 2019

Мне нужно иметь имя_продукта с '-', чтобы после тире были символы.Например, «Anything-Goes» должно быть «Anything - ####». Кроме того, сумма sum_sold должна быть меньше 1000.

Я пробовал несколько instr, substr, trim, но это не сработало.

select pr.promo_begin_date, pr.promo_end_date, trim('-' from 
p.prod_name),instr(p.prod_name, '-'),
case when p.prod_category = 'Girls' or p.prod_category = 'Women' then 
'Ladies'
when p.prod_category = 'Boys' or p.prod_category = 'Men' then 'Gentlemen' 
else 'Unisex' end PRODUCT_CATEGORY,
cast(sum(s.quantity_sold) as INTEGER) as PRODUCT_QUANTITY_SOLD
from products p
join promotions pr on p.prod_id = pr.promo_id
join sales s on s.prod_id = p.prod_id
where prod_name like 'A%' and
pr.promo_end_date <= '01-JUN-00'
group by case when p.prod_category = 'Girls' or p.prod_category = 'Women' 
then 'Ladies'
when p.prod_category = 'Boys' or p.prod_category = 'Men' then 'Gentlemen' 
else 'Unisex' end, 
pr.promo_begin_date, pr.promo_end_date, p.prod_name, p.prod_category
--having sum(s._quantity_sold) < 1000
order by p.prod_category desc, p.prod_name asc;

Я ожидаю, что сумма (кол-во проданных) будет меньше 1000, а PRODUCT_NAME, в которой есть символ '-', показывает символы после '-'.

1 Ответ

0 голосов
/ 18 июня 2019

Первое, что нужно сделать, это отформатировать название вашего продукта, используя следующую логику:

SELECT
    RPAD(REGEXP_SUBSTR('Anything-Goes', '[^-]+')
    || '-', LENGTH('Anything-Goes'), '#') AS M_S
FROM
    DUAL;

Output:
Anything-####


SELECT
    RPAD(REGEXP_SUBSTR('Anything Goes NO HYPHEN', '[^-]+')
    || '-', LENGTH('Anything Goes NO HYPHEN'), '#') AS M_S
FROM
    DUAL;

Output:
Anything Goes NO HYPHEN

Второе, что здесь будет работать с предложением «Имея».Но я думаю, что вы использовали другой столбец.

Итак, ваш запрос должен выглядеть следующим образом:

Я изменил код и указал его в комментарии: -- stackoverflow

SELECT
    PR.PROMO_BEGIN_DATE,
    PR.PROMO_END_DATE,

    -- stackoverflow
    -- COMMENTED YOUR CODE
    --TRIM('-' FROM P.PROD_NAME),

    -- stackoverflow
    -- BEGIN: CODE FOR ATTACHING # IN PRODUCT NAME
    RPAD(REGEXP_SUBSTR(P.PROD_NAME, '[^-]+')
    || '-', LENGTH(P.PROD_NAME), '#') AS PROD_NAME,
    -- END: BEGIN: CODE FOR ATTACHING # IN PRODUCT NAME

    -- stackoverflow
    --INSTR(P.PROD_NAME, '-'),
    CASE
        WHEN P.PROD_CATEGORY = 'Girls'
             OR P.PROD_CATEGORY = 'Women' THEN 'Ladies'
        WHEN P.PROD_CATEGORY = 'Boys'
             OR P.PROD_CATEGORY = 'Men' THEN 'Gentlemen'
        ELSE 'Unisex'
    END PRODUCT_CATEGORY,
    CAST(SUM(S.QUANTITY_SOLD) AS INTEGER) AS PRODUCT_QUANTITY_SOLD
FROM
    PRODUCTS P
    JOIN PROMOTIONS PR ON P.PROD_ID = PR.PROMO_ID
    JOIN SALES S ON S.PROD_ID = P.PROD_ID
WHERE
    PROD_NAME LIKE 'A%'
    AND PR.PROMO_END_DATE <= '01-JUN-00'
GROUP BY
    CASE
        WHEN P.PROD_CATEGORY = 'Girls'
             OR P.PROD_CATEGORY = 'Women' THEN 'Ladies'
        WHEN P.PROD_CATEGORY = 'Boys'
             OR P.PROD_CATEGORY = 'Men' THEN 'Gentlemen'
        ELSE 'Unisex'
    END,
    PR.PROMO_BEGIN_DATE,
    PR.PROMO_END_DATE,
    P.PROD_NAME,
    P.PROD_CATEGORY

-- stackoverflow
-- HAVING WILL WORK
having sum(to_number(s.QUANTITY_SOLD)) < 1000
ORDER BY
    P.PROD_CATEGORY DESC,
    P.PROD_NAME ASC;

Надеюсь, это полезно для вас.

Ура !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...