Ссылка на родительский столбец запроса в подзапросе (Oracle)

Как я могу сослаться на столбец вне подзапроса с помощью Oracle? Мне особенно нужно использовать его в операторе WHERE подзапроса.

В основном у меня есть это:

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:'Item'.'ItemNo':Invalid Identifier"

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 .

6
задан Ben 10 April 2012 в 20:15
поделиться