Pseudo-kolumna operatora przypadku Oracle SQL

0

Pytanie

Jest 2 w tabeli zamówień i sprawdzanie konfiguracji.

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;

Celem jest, aby znaleźć cus_no, order_num, w którym zamówienie jest nieprawidłowy w jednym z 3 warunków :

  1. typ pay_type - "za pobraniem" - kiedy to się dzieje, w pseudo-kolumnie z nazwą komentarze powinny być komunikat "zamówienie nie nadaje się do CoD".
  2. kolumna MFC nie jest zero - gdy to nastąpi, wtedy pseudo-kolumna z nazwą comments musi zawierać komunikat "zamówienie nie może być MFC".
  3. gdy dodawany jest dodatkowy produkt, który nie jest wymieniony w tabeli config_check. To wymaga pewnego wyjaśnienia. Dlatego postaram się zrobić wszystko, aby wyjaśnić powyższe przykłady z tabeli. W tabeli config_check 2 PROD_NOs (1000 i 1002) dla typu kontroli "Kontrola błędnych zamówień", która rozpoczęła się 16-21 listopada. Dzisiejsza data-21 listopada 2021 roku. W ten sposób można rozpatrywać tylko te 2 linie, w których dzisiejsza data jest od daty rozpoczęcia do daty zakończenia. Teraz numer zamówienia 347 posiada numer produktu 1110, którego nie ma w tabeli config_check. W takim przypadku w pseudo-kolumnie z nazwą komentarze powinny być komunikat "Nie wymienione elementy nie mogą być zamawiane".

Mam 1-e 2 warunki, ale nie byłem w stanie uzyskać 3-e. Oto moja próba wykonać zapytanie :

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

Powyższy wniosek daje wynik w postaci :

  1. DZ-17T92 837 zamówienie nie może być MFC
  2. KI-19A39 638 zamówienie nie należy do tresques

enter image description here

W tym przypadku musi być inna propozycja WHEN do 3-go warunki, i to samo musi być ujęta w nawiasy I w ostatnim zdaniu. Nie mogę dostać 3-e warunek w bloku CASE. Może ktoś proszę mi pomóc, aby uzyskać pożądany efekt? Pożądany wynik musi być

  1. DZ-17T92 837 zamówienie nie może być MFC
  2. KI-19A39 638 zamówienie nie należy do tresques
  3. FT-20U86 347 wymienione towary nie mogą być zamawiane

enter image description here

Szukaj pomocy lub nawet kierunkowskazu będzie świetny. Dziękuję, że przeczytałeś taki długi post.

Edycja : mam problemy z wstawieniem danych wyjściowych zapytania w formacie tabelarycznym. Podzielę się wydrukami w formacie jpeg.

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

Używasz warunek else w instrukcji CASE.

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

Nie jestem w stanie uzyskać tę część <wpisz jej kod>.<wpisz jej kod>
Arty155

Mam zapytanie: SELECT O1.cus_no, O1.order_num, 'nie wymienionych w wykazie, nie może być zamówiony' com zamówień O1, gdzie istnieje ( wybierz 1 z (wybierz o.* z rozkazów o wewnętrzne połączenie ( wybierz * z config_check gdzie działa rozporządzenia check_type = " check "i firma" Nowy system " między start_date i end_date) z na (art. prod_no = gr.wartość pola), gdzie o'.ORDER_CREATED > gr.начальная_дата) jestem, gdzie jestem.ORDER_NUM = O1.ORDER_NUM i O1.prod_no nie w (wybierz wartość pola od config_check gdzie check_type = 'nieprawidłowy zamówień sprawdzić i firma" Nowy system " między start_date i end_date) ) ;, która zwraca mi zamówienie Noom 347
Arty155

W innych językach

Ta strona jest w innych językach

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