Oracle SQL CASO di dichiarazione pseudo colonna

0

Domanda

Ci sono 2 tabelle ordini e 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;

Compito è quello di trovare cus_no, order_num in cui l'ordine non sia valido in una delle 3 condizioni :

  1. pay_type è 'contrassegno' -, quando succede questo, una pseudo colonna denominata commenti dovrebbe avere il messaggio "Questo ordine non si qualifica per il Merluzzo bianco'
  2. colonna MFC non è null, quando succede questo, una pseudo colonna denominata commenti dovrebbe avere il messaggio "Questo ordine non può essere una MFC'
  3. quando un prodotto aggiuntivo viene aggiunto che non è elencato in config_check tabella. Questo ha bisogno di qualche spiegazione. Quindi cercherò di fare del mio meglio con la tabella di cui sopra esempi per spiegare in dettaglio. In config_check tavolo ci sono 2 PROD_NOs (1000 1002) per CHECK_TYPE "Voci di Ordini di Controllo' iniziato il 16-Nov-21. La data di oggi è 21-NOV-2021. Quindi, solo quelle 2 righe può essere considerato dove oggi si trova tra la data di inizio e fine. Ora ordinare il numero 347 ha un numero di prodotto 1110 che non è in config_check tabella. In tal caso, la pseudo colonna denominata commenti dovrebbe avere il messaggio " Non elencato gli elementi non può essere ordinato.

Ho preso il 1 ° 2 condizioni, ma non sono stati in grado di ottenere il 3 ° uno. Ecco il mio tentativo di una query :

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

La query di cui sopra, dà come risultato :

  1. DZ-17T92 837 Questo ordine non può essere una MFC
  2. KI-19A39 638 Questo ordine non si qualifica per Cod

enter image description here

Il Caso dovrebbe avere un altro QUANDO la clausola per il 3 ° condizione e lo stesso dovrebbe essere in tra parentesi E clausola all'ultimo. Io non posso ottenere il 3 ° condizione in CASO di blocco. Qualcuno può aiutarmi a ottenere il risultato desiderato? L'output desiderato dovrebbe essere

  1. DZ-17T92 837 Questo ordine non può essere una MFC
  2. KI-19A39 638 Questo ordine non si qualifica per Cod
  3. FT-20U86 347 Non elencati gli elementi non può essere ordinato

enter image description here

In cerca di aiuto o anche puntatori sarà grande. Grazie per la lettura ad un post lungo.

Edit : sto avendo problemi di incollare l'output della query in formato tabella. Voglio condividere l'output in formato jpeg.

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

Si utilizza la condizione else in CASO di dichiarazione.

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

Non ero in grado di ottenere che <immettere il codice per la sua> parte.
Arty155

Ho query: select o1.cus_no, o1.order_num, Non gli elementi elencati possono non essere ordinato com da ordini o1 where exists ( select 1 from (select o.* da ordini o INNER JOIN ( select * from config_check dove check_type = "Voci di Ordini Check', sysdate tra data_inizio e end_date) c ON (o.prod_no = c.field_value) dove o.ORDER_CREATED > c.data_inizio) che dove.ORDER_NUM = o1.ORDER_NUM E o1.prod_no NOT IN (select FIELD_VALUE da config_check dove check_type = "Voci di Ordini Check', sysdate tra data_inizio e end_date) ) ; che mi viene l'ordine num 347
Arty155

In altre lingue

Questa pagina è in altre lingue

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