Итак, я хотел бы создать флаг, основанный на нескольких атрибутах и нескольких критериях. Ниже приведен вид структуры я иду за относительно флагов, которые я хочу задать:Можно ли включить запросы в структуру корпуса?
select a.*, b.WINNERID,
case when (QUERY 1) then 1
when (QUERY 2) then 2
when (QUERY 3) then 3
when (QUERY 4) then 4
else 5
end as priority
from MYTABLE a
left outer join MYSECONDTABLE b
on a.ID = b.ID
order by GROUP_ID, priority;
То, что я хотел бы сделать сейчас, чтобы использовать следующие вопросы, как то, что мои дела должны быть. Запросы не обязательно смотрят на одни и те же атрибуты; Мы рассматриваем несколько атрибутов и придаем каждому важность.
Запрос 1 имеет для нас самое большое значение, Query 4 является самым низким.
Что бы я хотел сделать, это в основном фильтр вниз по набору данных, основанный на уровне важности. Поэтому давайте скажем, что наш набор данных - 100 записей; если в случае 1 разрешается 30, тогда запрос для случая 2 должен смотреть только на остальные 70. 30, разрешенные в случае 1, получат приоритет 1 в качестве отдельного поля.
Запрос 1
select b.WINNERID, a.*
from MYTABLE a
join MYSECONDTABLE b
on a.ID=b.ID
where WINNERID is not null;
Запрос 2
select GROUP_ID, ID from MYTABLE where COLUMN1 = 'Y' and GROUP_ID in
(
select tb1.GROUP_ID from MYTABLE tb1 join MYTABLE tb2 on
tb1.GROUP_ID = tb2.GROUP_ID
and to_number(substr(tb1.GROUP_ID,10,3)) =2
and tb1.COLUMN1 = 'Y' and tb2.COLUMN1 = 'N'
);
Запрос 3
select distinct GROUP_ID from MYTABLE where COLUMN1 = 'Y' and GROUP_ID in
(
select tb1.GROUP_ID from MYTABLE tb1 join MYTABLE tb2 on
tb1.GROUP_ID = tb2.GROUP_ID
and to_number(substr(tb1.GROUP_ID,10,3)) =2
and tb1.COLUMN1 = 'Y' and tb2.COLUMN1 = 'Y'
and tb1.ID > tb2.ID
);
Запрос 4
select tb1.GROUP_ID from MYTABLE tb1 join MYTABLE tb2 on
tb1.GROUP_ID = tb2.GROUP_ID
and to_number(substr(tb1.GROUP_ID,10,3)) =2
and tb1.LAST_THING like 'WHATEVER%' and (tb2.LAST_THING not like WHATEVER%' or tb2.LAST_THING is null);
Я хотел бы установить флаг для каждого из этих запросов, показывая полные записи. Как я могу объединить их? Можно ли это сделать? Есть ли другой способ, которым я должен пытаться это сделать?
EDIT:
В основном это то, что мне нужно:
If (Query 1) флаг, то флаг = 1, в противном случае (Query 2) флаг = 2, в противном случае (Query 3) = 3 , else if (Query 4) flag = 4, else flag = 0
Просьба предоставить образец входных данных как можно меньше, сохраняя при этом усложнения, которые вы ожидаете. То, как вы написали свою попытку, невозможно; КОГДА в выражении CASE ожидает условие (true или false), а подзапрос не возвращает логическое значение (true или false).Вместо того, чтобы пытаться угадать, что вы хотели сделать, лучше всего сказать нам. Не через код, а на простом английском. – mathguy
В основном это то, что мне нужно: If (Query 1) then flag = 1, else if (Query 2) flag = 2, else if (Query 3) flag = 3, else if (Query 4) flag = 4, else flag = 0 – user7002207
Что это значит? Запрос 1 не является истинным или ложным, поэтому что означает игрушка, если query1? – mathguy