Псевдо-столбец оператора случая Oracle SQL

0

Вопрос

Есть 2 таблицы - заказы и проверка конфигурации.

create table orders (order_created date,
                     cus_no varchar2(20),
                     order_num number,
                     pay_type varchar2(30),
                     MFC date,
                     prod_no varchar2(15) );
                     
create table config_check (check_type varchar2(100),
                     field_name varchar2(10),
                     field_value varchar2(15),
                     start_date date,
                     end_date date
                    );
                    
insert into orders values ('20-NOV-21', 'GT-19Y67', 489, 'Credit Card', NULL, '1000');
insert into orders values ('07-OCT-21', 'NU-20D73', 567, 'Cash on Delivery', '14-OCT-21', '1001');
insert into orders values ('17-NOV-21', 'JP-16V81', 789, 'Cash on Delivery', NULL, '1101');
insert into orders values ('20-NOV-21', 'DZ-17T92', 837, 'Net Banking', '23-NOV-21', '1002');
insert into orders values ('16-SEP-21', 'RJ-18W107', 124, 'Cash on Delivery', NULL, '1002');
insert into orders values ('18-NOV-21', 'KI-19A39', 638, 'Cash on Delivery', NULL, '1000');
insert into orders values ('19-NOV-21', 'FT-20U86', 347, 'Net Banking', NULL, '1002');
insert into orders values ('19-NOV-21', 'FT-20U86', 347, 'Net Banking', NULL, '1110');



insert into config_check VALUES ('Invalid Orders Check', 'PROD_NO', '1000', '16-NOV-21', '30-NOV-21' );
insert into config_check VALUES ('Invalid Orders Check', 'PROD_NO', '1101', '08-SEP-21', '21-SEP-21' );
insert into config_check VALUES ('Invalid Orders Check', 'PROD_NO', '1002', '16-NOV-21', '30-NOV-21' );
insert into config_check VALUES ('Cust Bday Offer', 'CUST_NO', '845796', '13-AUG-21', '23-AUG-21' );

commit;

Задача состоит в том, чтобы найти cus_no, order_num, где заказ недействителен в одном из 3 условий :

  1. тип pay_type - "Наложенный платеж" - когда это происходит, в псевдо-столбце с именем комментарии должно быть сообщение "Этот заказ не подходит для CoD".
  2. столбец MFC не является нулевым - когда это происходит, тогда псевдо-столбец с именем comments должен содержать сообщение "Этот заказ не может быть MFC".
  3. когда добавляется дополнительный продукт, который не указан в таблице config_check. Это нуждается в некотором объяснении. Поэтому я постараюсь сделать все возможное, чтобы подробно объяснить приведенные выше примеры из таблицы. В таблице config_check есть 2 PROD_NOs (1000 и 1002) для типа проверки "Проверка недействительных заказов", которая началась 16-21 ноября. Сегодняшняя дата-21 ноября 2021 года. Таким образом, можно рассматривать только те 2 строки, в которых сегодняшняя дата находится между датой начала и датой окончания. Теперь номер заказа 347 имеет номер продукта 1110, которого нет в таблице config_check. В таком случае в псевдо-столбце с именем комментарии должно быть сообщение "Не перечисленные элементы не могут быть заказаны".

У меня есть 1-е 2 условия, но я не смог получить 3-е. Вот моя попытка выполнить запрос :

select o.CUS_NO, o.ORDER_NUM,
       CASE 
            WHEN o.pay_type = 'Cash on Delivery' THEN 'This order does not qualify for Cod'
            WHEN o.MFC IS NOT NULL THEN 'This order can not be an MFC'
       END comments
       from orders o INNER JOIN 
( select * from config_check where check_type = 'Invalid Orders Check' and sysdate between start_date and end_date) c
ON (o.prod_no = c.field_value)
where o.ORDER_CREATED > c.start_date
  AND (o.pay_type = 'Cash on Delivery' OR o.MFC IS NOT NULL);

Приведенный выше запрос дает результат в виде :

  1. DZ-17T92 837 Этот заказ не может быть МФЦ
  2. KI-19A39 638 Этот заказ не относится к треске

enter image description here

В этом случае должно быть другое предложение WHEN для 3-го условия, и то же самое должно быть заключено в скобки И в последнем предложении. Я не могу получить 3-е условие в блоке CASE. Может кто-нибудь, пожалуйста, помочь мне получить желаемый результат? Желаемый результат должен быть

  1. DZ-17T92 837 Этот заказ не может быть МФЦ
  2. KI-19A39 638 Этот заказ не относится к треске
  3. FT-20U86 347 Не перечисленные товары не могут быть заказаны

enter image description here

Поиск помощи или даже указателей будет отличным. Спасибо, что прочитали такой длинный пост.

Изменить : У меня возникли проблемы с вставкой выходных данных запроса в табличном формате. Я поделюсь выводом в формате jpeg.

case oracle sql
2021-11-20 20:21:40
1
0

Вы используете условие else в операторе CASE.

select o.CUS_NO, o.ORDER_NUM,
       CASE 
            WHEN o.pay_type = 'Cash on Delivery' THEN 'This order does not qualify for Cod'
            WHEN o.MFC IS NOT NULL THEN 'This order can not be an MFC'
        enter code here    **ELSE 'Non listed item can not be ordered'**                
       END as  comments
       from orders o INNER JOIN 
( select * from config_check where check_type = 'Invalid Orders Check' and sysdate between start_date and end_date) c
ON (o.prod_no = c.field_value)
where o.ORDER_CREATED > c.start_date
  AND (o.pay_type = 'Cash on Delivery' OR o.MFC IS NOT NULL);
2021-11-22 04:49:36

Я не смог получить эту часть <введите ее код>.<введите ее код>
Arty155

У меня есть запрос: SELECT О1.cus_no, О1.order_num, 'не включенных в перечень, не может быть заказан' com из заказов O1, где существует ( выберите 1 из (выберите o.* из приказов о внутреннее соединение ( выберите * из config_check где недействующим распоряжения check_type = " чек "и компания" Новые системы " между start_date и end_date) с на (арт.prod_no = гр.значение-поля), где о'.ORDER_CREATED > гр.начальная_дата) я, где я.ORDER_NUM = О1.ORDER_NUM и О1.prod_no не в (выберите значение-поля от config_check где check_type = 'неверный заказов проверяем и компания" Новые системы " между start_date и end_date) ) ;, который возвращает мне заказ Нум 347
Arty155

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................