Oracle SQL PRÍPADE vyhlásenia pseudo stĺpec

0

Otázka

K dispozícii sú 2 stoly - objednávok & config_check.

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;

Úlohou je nájsť cus_no, order_num, kde objednávka je neplatná v jednej z 3 podmienok :

  1. pay_type je 'na dobierku' - keď sa to stane, potom pseudo stĺpec s názvom pripomienky by mali mať správu 'Tento príkaz nespĺňa podmienky pre CoD'
  2. stĺpec MFC nie je null - keď sa to stane, potom pseudo stĺpec s názvom pripomienky by mali mať správy "To objednávku nie je možné MFC'
  3. keď dodatočný produkt sa pridá, ktorý nie je uvedený v config_check tabuľke. Tento človek potrebuje nejaké vysvetlenie. Takže budem sa snažiť čo najlepšie s vyššie uvedenej tabuľky príklady vysvetliť do detailu. V config_check tabuľke sú 2 PROD_NOs (1000 a 1002) pre CHECK_TYPE 'Neplatný Objednávky Check", ktorý sa začal o 16-Nov-21. Dnešný dátum je v 21-NOV-2021. Tak len tieto 2 riadky môžu byť považované za, ak dnešný deň leží medzi počiatočný a koncový dátum. Teraz obj. číslo 347 má číslo produktu 1110, ktorá nie je v config_check tabuľke. V takom prípade pseudo stĺpec s názvom pripomienky by mali mať hlásenie "Non uvedené položky nie je možné objednať'.

Mám 1. 2 podmienky ale neboli schopní sa dostať 3. jeden. Tu je môj pokus o dotazu :

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);

Uvedenú požiadavku dáva výsledok ako :

  1. DZ-17T92 837 Tento objednávku nie je možné MFC
  2. KI-19A39 638 To, aby sa nekvalifikuje na Dobierku

enter image description here

Prípad by mal mať iné, KEĎ doložky pre 3. stav a isté by malo byť v zátvorkách A bodu na poslednom. Nemôžem sa dostať 3. podmienka v PRÍPADE bloku. Môže niekto prosím, pomôžte mi dostať požadovaný výsledok? Požadovaný výstup by mal byť

  1. DZ-17T92 837 Tento objednávku nie je možné MFC
  2. KI-19A39 638 To, aby sa nekvalifikuje na Dobierku
  3. FT-20U86 347 Non uvedené položky nie je možné objednať

enter image description here

Potrebujete pomoc alebo dokonca ukazovatele budú skvelé. Ďakujem Vám za čítanie taký dlhý príspevok.

Edit : mám problémy prilepovaní dotaz výstup v tabuľke formát. Podelím sa výstup vo formáte jpeg.

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

Môžete použiť iný stav, v PRÍPADE ziskov a strát.

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

Nebol som schopný dostať, že <enter kód ňou> časť.
Arty155

Mám dotaz: vyberte o1.cus_no, o1.order_num, "Nie sú uvedené položky nie je možné objednať' kom z objednávky o1, kde existuje ( vyberte 1 z (vyberte o.* objednávky o VNÚTORNÉ spojenie ( select * from config_check, kde check_type = 'Neplatný Objednávky Pozrite" a sysdate medzi start_date a end_date) c (o.prod_no = c.field_value), kde o.ORDER_CREATED > c.start_date) som tam, kde som.ORDER_NUM = o1.ORDER_NUM A o1.prod_no NIE V (vyberte FIELD_VALUE z config_check, kde check_type = 'Neplatný Objednávky Pozrite" a sysdate medzi start_date a end_date) ), ktorý ma dostane poradie num 347
Arty155

V iných jazykoch

Táto stránka je v iných jazykoch

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