如何使用 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”
编辑:
好的,这就是为什么我需要这种结构:
我希望能够获得“错误”记录(项目缺少值)和“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中设置。