Oracle SQL CASO de declaración de pseudo columna

0

Pregunta

Hay 2 mesas de pedidos y 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 tarea es encontrar cus_no, order_num donde el orden no es válida en una de las 3 condiciones :

  1. pay_type es en Efectivo a la Entrega' - cuando esto sucede, un pseudo columna denominada comentarios debe tener el mensaje "Esta orden no califican para el Bacalao'
  2. columna de MFC no es nulo cuando esto sucede, un pseudo columna denominada comentarios debe tener el mensaje "Este orden no puede ser un MFC'
  3. cuando un producto adicional se agrega que no está incluida en config_check tabla. Esto necesita alguna explicación. Así que voy a intentar mi mejor esfuerzo con el de arriba de la tabla de ejemplos para explicar en detalle. En config_check mesa hay 2 PROD_NOs (1000 y 1002) para CHECK_TYPE no es Válido "los Pedidos de Verificación", que comenzó el 16-Nov-21. Hoy en día, la fecha es el 21-NOV-2021. Tan sólo esas 2 filas puede ser considerado donde la fecha de hoy se encuentra entre la fecha de inicio y fin. Ahora el número de orden de 347 tiene un número de producto 1110 que no está en config_check tabla. En tal caso, el pseudo columna denominada comentarios debe tener el mensaje de 'No de los elementos de la lista no puede ser ordenado".

Tengo la 1 de 2 condiciones, pero no han sido capaces de llegar a la 3ª. Aquí está mi intento en la consulta :

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 consulta anterior da el resultado como :

  1. DZ-17T92 837 Este orden no puede ser un MFC
  2. KI-19A39 638 Esta orden no califican para el Bacalao

enter image description here

El Caso debe tener otro CUANDO la cláusula de la 3ª condición y la misma debe ser en el que figura entre corchetes, Y la cláusula en la última. No puedo conseguir la 3ª condición en el CASO del bloque. Por favor alguien puede ayudarme a conseguir el resultado deseado? La salida deseada debe ser

  1. DZ-17T92 837 Este orden no puede ser un MFC
  2. KI-19A39 638 Esta orden no califican para el Bacalao
  3. FT-20U86 347 No una lista de los artículos pueden no ser ordenado

enter image description here

Buscando ayuda o incluso punteros será grande. Gracias por leer un mensaje tan largo.

Edit : estoy teniendo problemas para pegar el resultado de la consulta en formato de tabla. Voy a compartir el resultado en formato jpeg.

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

Utilice otra condición en CASO de declaración.

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

Yo no era capaz de conseguir que <introduzca el código de su> parte.
Arty155

Tengo consulta: select o1.cus_no, o1.order_num, 'No los elementos de la lista no puede ser ordenado" com de órdenes o1 donde exists ( select 1 from (select o.* a partir de los pedidos o INNER JOIN ( select * from config_check donde check_type = 'no Válido Pedidos de Verificación' y sysdate entre start_date y end_date) c (o.prod_no = c.field_value) donde o.ORDER_CREATED > c.start_date) i donde i.ORDER_NUM = o1.ORDER_NUM Y o1.prod_no NO EN (seleccionar FIELD_VALUE de config_check donde check_type = 'no Válido Pedidos de Verificación' y sysdate entre start_date y end_date) ) ; lo que me pone la orden num 347
Arty155

En otros idiomas

Esta página está en otros idiomas

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