Первое, что нужно сделать, это отформатировать название вашего продукта, используя следующую логику:
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;
Надеюсь, это полезно для вас.
Ура !!