Oracle SQL CAZ declarație de pseudo-coloana

0

Problema

Sunt 2 tabele - comenzi & 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;

Sarcina este de a găsi cus_no, order_num în cazul în care comanda nu este valid într-una din cele 3 condiții :

  1. pay_type este "Cash la Livrare" - atunci când acest lucru se întâmplă atunci o pseudo-coloana nume comentarii ar fi mesajul Asta pentru a nu se califica pentru CoD'
  2. coloana MFC nu este null - atunci când acest lucru se întâmplă atunci o pseudo-coloana nume comentarii ar fi mesajul 'Acest ordin nu poate fi un MFC'
  3. atunci când un element suplimentar este adăugat care nu este listat în config_check masă. Acesta are nevoie de o explicație. Așa că voi încerca meu cel mai bun cu tabelul de mai sus exemple pentru a explica în detaliu. În config_check masa sunt 2 PROD_NOs (1000 și 1002) pentru CHECK_TYPE 'Invalid Ordine Verifica' care a început pe 16-Nov-21. Data de astăzi este de 21-NOV-2021. Deci doar aceste 2 rânduri pot fi considerate în cazul în care data de astăzi se află între început și data de sfârșit. Comanda acum numărul 347 are un număr produs 1110 care nu este în config_check masă. Într-un asemenea caz pseudo coloana nume comentarii ar trebui să aibă un mesaj de 'Non elementele enumerate nu poate fi comandat'.

Am primit 1 2 condiții, dar nu au fost capabili de a obține 3-lea. Aici este încercarea mea de interogare :

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

Interogarea de mai sus dă rezultat ca :

  1. DZ-17T92 837 Acest ordin nu poate fi un MFC
  2. KI-19A39 638 Acest ordin nu se califică pentru Cod

enter image description here

Cazul ar trebui să aibă un alt atunci CÂND clauza pentru a 3-a condiție și același lucru ar trebui să fie în paranteze ȘI clauza la ultimul. Eu nu pot obține a 3-a condiție în CAZ de bloc. Poate cineva să mă ajute obține rezultatul dorit? Rezultatul dorit ar trebui să fie

  1. DZ-17T92 837 Acest ordin nu poate fi un MFC
  2. KI-19A39 638 Acest ordin nu se califică pentru Cod
  3. FT-20U86 347 Non elementele enumerate nu poate fi comandat

enter image description here

În căutarea pentru ajutor sau chiar indicii va fi mare. Vă mulțumesc pentru lectură astfel de perioadă lungă de post.

Edit : am probleme cu lipirea interogare de ieșire în format de tabel. Voi împărtăși ieșire în format jpeg.

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

Utilizați condiție altceva în CAZ de declarație.

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

Eu nu am fost capabil de a obține că <introduceți codul ei> parte.
Arty155

Am interogare: select o1.cus_no, o1.order_num, 'Non elementele enumerate nu poate fi comandat' com de ordine o1 unde există ( selectați 1 din (selectați-o.* la comenzi o INNER JOIN ( select * from config_check unde check_type = 'Invalid Ordine Verifica și sysdate între start_date și end_date) c PE (o.prod_no = c.field_value) în cazul în care o.ORDER_CREATED > c.start_date) am unde-i.ORDER_NUM = o1.ORDER_NUM ȘI o1.prod_no NU ÎN (selectați FIELD_VALUE de config_check unde check_type = 'Invalid Ordine Verifica și sysdate între start_date și end_date) ) ; ceea ce-mi ajunge ordinea num 347
Arty155

În alte limbi

Această pagină este în alte limbi

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