Come riferimento a una colonna esterna a una sottoquery utilizzando Oracle? Ho specificamente bisogno di usarlo nell'istruzione WHERE della sottoquery.Colonna della query padre di riferimento in subquery (Oracle)
Fondamentalmente ho questo:
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
vorrei cambiare WHERE Attribute.ItemNo=12345
al WHERE Attribute.ItemNo=Item.ItemNo
nella subquery, ma io non riesco a capire se questo è possibile. Continuo a ricevere "ORA-00904: 'Articolo' 'ITEMNO':. Valido Identifier"
EDIT:
Ok, questo è il motivo per cui ho bisogno di questo tipo di struttura:
voglio essere in grado di ottenere un conteggio dei record "Errore" (in cui all'elemento manca un valore) e dei record "OK" (dove l'articolo ha un valore).
Il modo in cui l'ho impostato nel violino restituisce i dati corretti. Penso che potrei finire col riempire il valore in ciascuna subquery, poiché questo sarebbe probabilmente il modo più semplice. Scusa se le mie strutture di dati sono un po 'contorte. Posso spiegare se necessario.
mie tabelle sono:
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));
e la mia domanda finora è:
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;
E 'anche istituito in un SQL Fiddle.
non si può .. cosa si desidera selezionare? potrebbe avere un'altra soluzione oltre al join esterno sinistro. – hkutluay
vedere lo sqlfiddle – tedski