У меня есть таблица, которая может содержать три разных типа файлов. Если присутствует тип файла A, выберите A, иначе, если присутствует тип файла B И нет типа Cs с тем же идентификатором client_id, выберите B, иначе выберите тип C.
Некоторая другая магия произойдет позже, которая удалит выбранный файл из таблицы.Условный выбор на основе значения столбца
У меня есть следующая таблица в 10g SQL базы данных Oracle:
ID | TYPE | CLIENT_ID
########################
file1 | A | 1
file2 | B | 1
file3 | C | 1
file4 | B | 2
и для тех, кто хочет следовать вдоль дома, sqlfidde или 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);
Я надеюсь создать большой неприятный запрос для захвата следующего файла на основе вышеуказанных критериев, что должно привести к следующему порядку, если запрос был запущен четыре раза:
#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)
Попытка, что у меня дальше всего было написать три отдельных запросов для каждого типа:
--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'
Я хочу, чтобы проверить количество строк, возвращаемых после каждого, и если это 0 использовать следующий выбор, но все в одном выражении SQL.
Спасибо за редактирование, цель состоит в том, чтобы вернуть только одну строку. Стол останется маленьким, поэтому сканирование всего не является проблемой. – cazzer
Просто так это помогает кому-то еще в будущем - Oracle, во всей своей изобретательности решил пойти против нормы и иметь по умолчанию bucket как «else» вместо «в противном случае», – killjoy