Oracle SQL情况的声明伪列

0

的问题

有2个表-订单和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;

任务是找到cus_no,order_num那里的秩序是无效的,在3个条件:

  1. pay_type是'现金交付'-当发生这种情况,然后伪列名的意见应该有消息',这便不符合鳕鱼'
  2. 列MFC不是空的时候发生这种情况,然后伪列名的意见应该有消息'这个秩序不能MFC'
  3. 当一个额外的产品加入这没有列在config_check表。 这一个需要一些解释。 所以我会尽我所有上述表格的例子来解释的详细说明。 在config_check表有2PROD_NOs(1000和1002)CHECK_TYPE'无效的命令检查,开始在16-Nov-21. 今天的日期是21-NOV-2021年。 所以只有这2行,可以考虑在今天的日期之间开始和结束日期。 现在顺序编号347有的产品数量1110这是不是在config_check表。 在这样的情况下伪列名的意见应该有消息'不列的项目不能下令'.

我已经得到了1 2个条件,但没有能够得到3个。 这是我尝试在查询:

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

上述查询给出结果为:

  1. DZ-17T92 837这种秩序不能MFC
  2. KI-19A39 638这便不符合鳕鱼

enter image description here

这种情况下应该有另一个时条款第3条件和相同的,应在方括号内的案和条款在最后。 我不能获得第3条件的情况下块。 有人可以帮助我得到想要的结果? 所需的输出应

  1. DZ-17T92 837这种秩序不能MFC
  2. KI-19A39 638这便不符合鳕鱼
  3. FT-20U86 347无所列项目的可以不下令

enter image description here

在寻求帮助或者甚至指针将是巨大的。 谢谢你读这样一个长期职位。

编辑:我有麻烦贴查询输出的表格式。 我会分享出在jpeg。

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

你用别的条件的 情况下 发言。

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

我是不是能够获取,<输入代码她>的一部分。
Arty155

我有查询:选择o1。cus_no,o1。order_num,'不列的项目不能下令'com从订单o1在那里存在(选择1(选择o.* 从订单o内加入(select*from config_check在check_type='无效的命令检查'和sysdate之间start_date和end_date)c(o.prod_no=c。field_value)在o.ORDER_CREATED>c。start_date)我我在哪里.ORDER_NUM=o1。ORDER_NUM和o1。prod_no不在(选择FIELD_VALUE从config_check在check_type='无效的命令检查'和sysdate之间start_date和end_date));其得到我的订单数347
Arty155

其他语言

此页面有其他语言版本

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