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=Item.ItemNo
にWHERE Attribute.ItemNo=12345
を変更したいのですが、これは可能であるならば、私は理解することはできません。
EDIT:
私がしたい:私はこのような構造を必要とする理由
[OK]を、これは「エラー」レコード(アイテムに値がない場合)と「OK」レコード(アイテムに値がある場合)の数を取得できるようにします。
私がフィドルで設定した方法で正しいデータが返されます。私は、サブクエリのそれぞれの価値を埋めることになるかもしれないと思います。これはおそらく最も簡単な方法でしょう。私のデータ構造が少し畳み込まれている場合は申し訳ありません。必要があれば私は説明することができます。
私のテーブルは以下のとおりです。
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