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 :
- 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.
- 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.
- 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 :
- DZ-17T92 837 Bu sipariş bir MFC olamaz
- Kİ-19A39 638 Bu sipariş Cod için uygun değildir
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:
- DZ-17T92 837 Bu sipariş bir MFC olamaz
- Kİ-19A39 638 Bu sipariş Cod için uygun değildir
- FT - 20U86 347 Listelenmemiş ürünler sipariş edilemez
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.