Проблемы с запросом SQL - PullRequest
0 голосов
/ 20 июня 2020

Я просто хочу вывести только те записи, которые для того же имени customer_name имеют cust_valid = 'I' и cust_valid = 'A'

Я пытался это сделать, но результат для cust_valid содержит только записи 'A' введите здесь код

SELECT c.cust_first_name ||' '|| c.cust_last_name AS CUSTOMER_NAME, 
            to_number(SUBSTR(c.cust_income_level, INSTR(c.cust_income_level, '-')+2), '999999') as UPPER_INCOME_LEVEL, 
            sum(s.amount_sold) as TOTAL_AMOUNT, 
            (CASE  WHEN c.cust_credit_limit <= 1500 THEN 'Low_limit'
             ELSE 'High_limit'
             END) credit_limit_level,
             c.cust_valid
FROM SH.customers c  
JOIN sh.sales s on c.cust_id = s.cust_id
WHERE c.cust_valid = 'A' AND c.cust_income_level like '%-%' 
GROUP BY c.cust_first_name, c.cust_last_name, c.cust_income_level, c.cust_credit_limit, c.cust_valid 
HAVING SUM(s.amount_sold) > (c.cust_credit_limit * 50)
ORDER BY UPPER_INCOME_LEVEL DESC, CUSTOMER_NAME;

Ответы [ 3 ]

1 голос
/ 20 июня 2020

Вам нужно использовать предложение EXISTS в условии WHERE следующим образом:

and exists (select 1
              from sh.customers cin
             where cin.cust_id = c.cust_id
               and c.c.cust_valid = 'I'
           )
0 голосов
/ 20 июня 2020

Пробовал, но безрезультатно. Я не думаю, что показал правильное условие.

Я должен объяснить ... Измените запрос, чтобы отобразить имя клиента (CUSTOMER_NAME), для которого есть строки с CUST_VALID = 'A' и строки с CUST_VALID = 'I' как отдельный результат.

0 голосов
/ 20 июня 2020

Если я правильно следил за вами, вы можете реализовать эту фильтрацию, изменив предложение having:

HAVING 
    SUM(s.amount_sold) > (c.cust_credit_limit * 50)
    AND MAX(CASE WHEN cust_valid= 'I' THEN 1 ELSE 0 END) = 1
    AND MAX(CASE WHEN cust_valid= 'A' THEN 1 ELSE 0 END) = 1

и cust_valid = 'A'

...