Как я могу ссылаться на столбец вне подзапроса с использованием Oracle? Мне нужно использовать его в инструкции WHERE для подзапроса.Справочный столбец родительского запроса в подзапросе (Oracle)
В принципе у меня есть это:
SELECT Item.ItemNo, Item.Group
FROM Item
LEFT OUTER JOIN (SELECT Attribute.Group, COUNT(1) CT
FROM Attribute
WHERE Attribute.ItemNo=12345) A ON A.Group = Item.Group
WHERE Item.ItemNo=12345
Я хотел бы изменить WHERE Attribute.ItemNo=12345
к WHERE Attribute.ItemNo=Item.ItemNo
в подзапрос, но я не могу понять, если это возможно. Я получаю "ORA-00904: 'Пункт' 'ITEMNO':. Недопустимый идентификатор"
EDIT:
Хорошо, вот почему мне нужен этот вид структуры:
Я хочу быть в состоянии получить количество записей «Ошибка» (где элемент отсутствует значение) и записи «ОК» (где элемент имеет значение).
Способ, которым я установил его в скрипке, возвращает правильные данные. Я думаю, что я мог бы просто заполнить значение в каждом из подзапросов, так как это, вероятно, было бы самым простым способом. Извините, если мои структуры данных немного запутаны. Я могу объяснить, если это необходимо.
Мои таблицы:
create table itemcountry(
itemno number,
country nchar(3),
imgroup varchar2(10),
imtariff varchar2(20),
exgroup varchar2(10),
extariff varchar2(20));
create table itemattribute(
attributeid varchar2(10),
tariffgroup varchar2(10),
tariffno varchar2(10));
create table icav(
itemno number,
attributeid varchar2(10),
value varchar2(10));
и мой запрос до сих пор:
select itemno, country, imgroup, imtariff, im.error "imerror", im.ok "imok", exgroup, extariff, ex.error "exerror", ex.ok "exok"
from itemcountry
left outer join (select sum(case when icav.itemno is null then 1 else 0 end) error, sum(case when icav.itemno is not null then 1 else 0 end) ok, tariffgroup, tariffno
from itemattribute ia
left outer join icav on ia.attributeid=icav.attributeid
where (icav.itemno=12345 or icav.itemno is null)
group by tariffgroup, tariffno) im on im.tariffgroup=imgroup and imtariff=im.tariffno
left outer join (select sum(case when icav.itemno is null then 1 else 0 end) error, sum(case when icav.itemno is not null then 1 else 0 end) ok, tariffgroup, tariffno
from itemattribute ia
left outer join icav on ia.attributeid=icav.attributeid
where (icav.itemno=12345 or icav.itemno is null)
group by tariffgroup, tariffno) ex on ex.tariffgroup=exgroup and extariff=ex.tariffno
where itemno=12345;
Он также создан в SQL Fiddle.
Вы не можете .. что вы хотите выбрать? может иметь другое решение, отличное от внешнего внешнего соединения. – hkutluay
см. Sqlfiddle – tedski