0
所以我一直试图让查询工作半小时,现在我越来越绝望。问题是,我想加入一个表,我的查询,我在一个子查询中生成。子查询本来应该如下所示:在连接的子查询中使用别名或仅连接Oracle中的一行
left join (select ACCN.*,
ROW_NUMBER() over (order by
case
when sysdate between ACCN.BDate and ACCN.EDate then 0
else 1
end, ACCN.EDate desc) as CNT
from AccountContracts ACCN
where ACCN.AccId = ACC.Id
order by case
when sysdate between ACCN.BDate and ACCN.EDate then 0
else 1
end, ACCN.EDate desc) ACN on ACN.CNT = 1
这里的想法是,当一个帐户可以连接到多个合同,我只是想表明无论是活跃合约(sysdate between ACCN.AcnBDate and ACCN.AcnEDate
),或已过期的一个最近。因此,我选择相关的合同,相应地订购它们,最后我只考虑第一个合同。
但是,这不起作用,因为我不能在子查询中引用别名ACC
。当然,我可以将where
条款移至on
条款,但在这种情况下,其他条件将无法产生预期结果。
所以我要么需要能够引用别名在我的子查询,在我on
-clause只选择具有最低CNT
行,或者认为不同的,更好的解决方案(这很可能会存在)的。
有人可以帮忙吗?
在此先感谢!
从表中显示的样本数据。 –
你是什么意思,具体是什么? –
显示涉及不同列的一些数据行。 –