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 지 않은 null 이 경우 그 의사는 열 이라는 의견이 있어야의 메시지가'이해할 수 없 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. AN-17T92 837 이해할 수 없 MFC
  2. KI-19A39 638 이 순서를 자격을 주지 않는 대구

enter image description here

는 경우가 있어야 할 때 다른 조항에 대한 제 3 조건과 동일해야에서 괄호 및 절에서 마지막입니다. 을 얻을 수 없는 제 3 조건에서 케이스 차단합니다. 할 수 있는 사람이 도와주세요 원하는 결과를 얻을 수? 원하는 출력해야한

  1. AN-17T92 837 이해할 수 없 MFC
  2. KI-19A39 638 이 순서를 자격을 주지 않는 대구
  3. FT-20U86 347 비 나열된 항목할 수 있는지 주문

enter image description here

을 찾는 데 도움 또는 점이 큰 것입니다. 을 읽어 주셔서 감사합니다 같은 긴 post.

편집:나는 데 문제가 붙여넣기 쿼리에서 출력 테이블 형식입니다. 내가 공유하는 출력에서 액세스 포인트가 필요합니다.

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 사이의 시작일 즉)c(o.prod_no=c.field_value)where o.ORDER_CREATED>c.시작일)나는 내가.ORDER_NUM=o1.ORDER_NUM 및 o1.prod_no 지(선택 FIELD_VALUE 에서 config_check 는 check_type='잘못된 명령인'과 sysdate 사이의 시작일 즉));는 주 num347
Arty155

다른 언어로

이 페이지는 다른 언어로되어 있습니다

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