Oracle SQL instruction du CAS de pseudo-colonne

0

La question

Il y a 2 tables - commandes & 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;

La tâche est de trouver cus_no, order_num où la commande n'est pas valide dans l'une des 3 conditions :

  1. pay_type est "Cash on delivery" - quand cela se produit alors un pseudo colonne nommée commentaires devraient avoir le message " Cet ordre n'est pas admissible pour la Morue
  2. colonne MFC n'est pas nulle, lorsque cela se produit alors un pseudo colonne nommée commentaires devraient avoir le message "Cette commande ne peut pas être une MFC"
  3. lorsqu'un produit supplémentaire est ajoutée, ce qui n'est pas répertorié dans config_check table. Un besoin de quelques explications. Donc je vais essayer de mon mieux avec le tableau ci-dessus des exemples pour expliquer en détail. Dans config_check table, il y a 2 PROD_NOs (1000 et 1002) pour CHECK_TYPE 'non Valide les Commandes Check" qui a débuté le 16-Nov-21. La date d'aujourd'hui 21-NOV-2021. Si seulement ces 2 lignes peuvent être envisagées dans les cas où la date d'aujourd'hui se situe entre le début et date de fin. Maintenant numéro de commande 347 a un numéro de produit 1110 ce qui n'est pas dans config_check table. Dans un tel cas, la pseudo-colonne nommée commentaires devraient avoir le message "Non les produits de la liste ne peut être ordonnée".

J'ai eu la 1er 2, mais les conditions n'ont pas été en mesure d'obtenir la 3ème. Voici ma tentative de la requête :

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 requête ci-dessus donne le résultat sous la forme :

  1. DZ-17T92 837 Cette commande ne peut pas être une MFC
  2. KI-19A39 638 Cet ordre ne se qualifie pas pour la Morue

enter image description here

Le Cas de l'autre LORSQUE la clause pour la 3ème condition et le doit en être de même dans le texte placé entre crochets ET la clause à la dernière. Je ne peux pas obtenir la condition 3. dans le CAS du bloc. Quelqu'un peut-il svp m'aider à obtenir le résultat souhaité? La sortie désirée doit être

  1. DZ-17T92 837 Cette commande ne peut pas être une MFC
  2. KI-19A39 638 Cet ordre ne se qualifie pas pour la Morue
  3. FT-20U86 347 Non répertorié les éléments ne peuvent pas être commandés

enter image description here

Vous cherchez de l'aide ou même des pointeurs sera grande. Merci d'avoir lu ce long post.

Edit : j'ai du mal à coller le résultat de la requête sous forme de tableau. Je vais partager les la sortie au format jpeg.

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

Vous utilisez d'autre condition dans le CAS de la déclaration.

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

Je n'ai pas été en mesure d'obtenir que <entrer son code> de la partie.
Arty155

J'ai une requête: select o1.cus_no, o1.order_num, " Non répertorié les éléments ne peuvent pas être commandés com à partir de commandes o1 où exists ( select 1 from (select o.* à partir de commandes o INNER JOIN ( select * from config_check où check_type = 'non Valide les Commandes Check" et sysdate entre date_debut et end_date) c (o.prod_no = c.field_value) où o.ORDER_CREATED > c.date_debut) je où je.ORDER_NUM = o1.ORDER_NUM ET o1.prod_no PAS DANS (sélectionnez FIELD_VALUE de config_check où check_type = 'non Valide les Commandes Check" et sysdate entre date_debut et end_date) ) ; ce qui me fait de l'ordre num 347
Arty155

Dans d'autres langues

Cette page est dans d'autres langues

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