Mam tabelę, która może zawierać trzy różne typy plików. Jeśli plik typu A jest obecny, wybierz opcję A, w przeciwnym razie, jeśli plik typu B jest obecny I nie ma typu C z tym samym identyfikatorem klienta, wybierz opcję B, w przeciwnym razie wybierz typ C.
Kolejna magia nastąpi później, co spowoduje usunięcie wybranego pliku ze stołu.Wybór warunkowy oparty na wartości kolumny
Mam poniższej tabeli w bazie danych 10g Oracle SQL:
ID | TYPE | CLIENT_ID
########################
file1 | A | 1
file2 | B | 1
file3 | C | 1
file4 | B | 2
i dla tych, którzy chcą podążać w domu, sqlfidde lub SQL:
create table files (
id varchar(8) primary key,
type varchar(4),
client_id number
);
insert into files values ('file1', 'A', 1);
insert into files values ('file2', 'B', 1);
insert into files values ('file3', 'C', 1);
insert into files values ('file4', 'B', 2);
Mam nadzieję stworzyć duże nieprzyjemne zapytanie, aby pobrać następny plik w oparciu o powyższe kryteria, co powinno doprowadzić do następującej kolejności, jeśli zapytanie zostało uruchomione cztery razy:
#1: file1, A, 1 (grab any As first)
#2: file4, B, 2 (grab any Bs who don't have any Cs with the same client_id)
#3: file3, C, 1 (grab any Cs)
#4: file2, B, 1 (same as run #2)
Próba że dostał mi najdalej było napisanie trzech oddzielnych zapytań dla każdego typu:
--file type 'A' selector
select * from files where type = 'A'
--file type 'B' selector
select * from files where type = 'B' and client_id = (
select client_id from files group by client_id having count(*) = 1
);
--file type 'C' selector
select * from files where type = 'C'
Chcę sprawdzić liczbę wierszy zwracanych po każdym i jeśli jest 0 użycie następnego select, ale wszystko w jednym poleceniu SQL.
Dzięki za edycji, celem jest, aby powrócić tylko jeden wiersz. Stół pozostanie mały, więc skanowanie całej sprawy nie jest problemem. – cazzer
Po to, aby pomóc komuś innemu w przyszłości - Oracle, w całej ich pomysłowości, zdecydowało się pójść wbrew normie i mieć domyślną wartość "else" zamiast "inaczej" – killjoy