Есть ли причина, по которой вы не можете переместить подвыбор в объединение?Из вашей скорректированной версии на тестовом примере @ Benoit вы можете сделать:
select case when a.y = b.z then 1 else 0 end, count(*)
from (select 'A'||rownum y, 'B' x from dual connect by rownum <= 3) a,
(select 'A'||rownum z from dual where rownum=1) b
where a.x = 'B'
group by case when a.y = b.z then 1 else 0 end;
Что дает (в 10 г):
CASEWHENA.Y=B.ZTHEN1ELSE0END COUNT(*)
---------------------------- ----------------------
1 1
0 2
Не совсем уверен, что даст ответ, который вы хотите, ноТрудно сказать, поскольку это так упрощенно и может быть отправной точкой.
Редактировать Кажется, это действительно слишком упрощенно.Другое возможное решение, которое также выглядит слишком простым, но может помочь, если подойти к этому с другого конца и просто сделать
case
в
select
агрегатной функцией:
SELECT MIN(CASE
WHEN x IN (SELECT me FROM here WHERE this = 'example') THEN
a.col1
ELSE
nvl(a.col1, a.col2)
END)
FROM table1 a
WHERE a.this = 'that'
GROUP BY (CASE
WHEN x IN (SELECT me FROM here WHERE this = 'example') THEN
a.col1
ELSE
nvl(a.col1, a.col2)
END)