Oracle SQL CASE deyimi sözde sütun

0

Soru

2 Tablo var - siparişler ve 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;

Görev, siparişin 3 koşuldan birinde geçersiz olduğu cus_no, order_num'u bulmaktır :

  1. pay_type 'Teslimatta Nakit' - bu gerçekleştiğinde, yorumlar adlı sahte bir sütunun 'Bu sipariş CoD için uygun değil' mesajına sahip olması gerekir.
  2. MFC sütunu null değil - bu gerçekleştiğinde, yorumlar adlı sahte bir sütunda 'Bu sipariş MFC olamaz'iletisi bulunmalıdır.
  3. config_check tablosunda listelenmeyen ek bir ürün eklendiğinde. Bunun biraz açıklamaya ihtiyacı var. Ben de elimden yukarıdaki tabloda örnekler ile ayrıntılı olarak açıklamaya çalışacağız. Config_check tablosunda 16-Nov-21'de başlayan CHECK_TYPE 'Geçersiz Siparişler Kontrolü' için 2 PROD_NO (1000 ve 1002) bulunmaktadır. Bugünün tarihi 21-Kasım-2021. Bu nedenle, bugünün tarihinin başlangıç ve bitiş tarihi arasında olduğu yerde yalnızca bu 2 satır düşünülebilir. Şimdi sipariş numarası 347, config_check tablosunda olmayan bir ürün numarası 1110'a sahiptir. Böyle bir durumda, yorumlar adlı sözde sütunda 'Listelenmeyen öğeler sipariş edilemez' mesajı bulunmalıdır.

1. 2 şartım var ama 3. şartı alamadım. İşte sorguya girişimim :

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

Yukarıdaki sorgu sonucu şu şekilde verir :

  1. DZ-17T92 837 Bu sipariş bir MFC olamaz
  2. Kİ-19A39 638 Bu sipariş Cod için uygun değildir

enter image description here

Durum, 3. koşul için başka bir WHEN yan tümcesine sahip olmalı ve aynı parantez içinde VE en sondaki yan tümcede olmalıdır. VAKA bloğundaki 3. koşulu alamıyorum. Birisi lütfen istenen sonucu elde etmeme yardımcı olabilir mi? İstenen çıktı şöyle olmalıdır:

  1. DZ-17T92 837 Bu sipariş bir MFC olamaz
  2. Kİ-19A39 638 Bu sipariş Cod için uygun değildir
  3. FT - 20U86 347 Listelenmemiş ürünler sipariş edilemez

enter image description here

Yardım ve hatta işaretçiler aramak harika olacak. Bu kadar uzun bir yazı okumak için teşekkür ederim.

Düzenleme: Sorgu çıktısını tablo biçiminde yapıştırmakta sorun yaşıyorum. Çıktıyı jpeg olarak paylaşacağım.

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

Büyük / küçük harf deyiminde else koşulunu kullanırsınız.

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

Bu < enter code her> bölümünü alamadım.
Arty155

Sorgum var: o1'i seçin.cus_no, o1.order_num, 'Olmayan öğeler ( 1 seç bulunduğu (seç o o1 siparişler' com sipariş edilebilir değil.* emir gelen o İÇ check_type = 'Geçersiz Siparişleri Kontrol ve başlangıç_tarihi arasında üretmek ve (o c verir) nerede config_check seçin * KATILMAK (.prod_no = c.field_value) nerede o.ORDER_CREATED > c.ben başlangıç_tarihi) ben.ORDER_NUM = o1.SIRA_NUM VE o1.prod_no NOT İN (config_check'ten FİELD_VALUE öğesini seçin, burada check_type = 'Geçersiz Siparişler Denetimi' ve start_date ile end_date arasındaki sysdate)); bu bana num 347 siparişini verir
Arty155

Diğer dillerde

Bu sayfa diğer dillerde

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