Sql 访问字段列表中的嵌套选择
我收到一个查询,用于搜索数据库中的某些数据,如下所示:Sql 访问字段列表中的嵌套选择,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,我收到一个查询,用于搜索数据库中的某些数据,如下所示: select nvl(to_char(a.empresa), 'SEM REMESSA') empresa, c.conta, nvl(sum(a.valor_total), 0) as folha, (select count(distinct(l2.creditado)) from lancamentos l2 inner join vw_arquivos a
select nvl(to_char(a.empresa), 'SEM REMESSA') empresa,
c.conta,
nvl(sum(a.valor_total), 0) as folha,
(select count(distinct(l2.creditado))
from lancamentos l2
inner join vw_arquivos a2
on l2.arquivo = a2.arquivo
where a2.empresa = a.empresa) as funcionarios
from conta_table c
left join vw_arquivos a
on c.conta = a.conta
and a.situacao = 6
group by a.empresa, c.conta
我必须获取操作的值folha/funcionarios
,但是如果我将其放入列表中,我会得到错误:
ORA-00904: "FUNCIONARIOS": invalid identifier
00904. 00000 - "%s: invalid identifier"
当我用相同的嵌套select替换对funcionarios
的引用时,我在引用folha
时得到相同的错误
我知道我可以用它们各自的计算来替换这两个引用,它是有效的。像这样:
nvl(sum(a.valor_total), 0) /
(select count(distinct(l2.creditado))
from lancamentos l2
inner join vw_arquivos a2
on l2.arquivo = a2.arquivo
where a2.empresa = a.empresa) as division
但这看起来并没有那么优化,也不是最好的方法。所以我的问题是。。。
是否有任何方法可以通过最后一次除法运算选择这些值,但比重复
folha
和funcialios
计算更优化?可能是引用这些已计算值的方法。folha
和funcionarios
不能在同一查询中引用,因为它们是别名。您必须将整个查询作为子查询,并获得除法,如下所示:
select empresa, conta, folha/funcionarios folha_div_funcionarios
from (
select nvl(to_char(a.empresa), 'SEM REMESSA') empresa,
c.conta,
nvl(sum(a.valor_total), 0) as folha,
(select count(distinct(l2.creditado))
from lancamentos l2
inner join vw_arquivos a2
on l2.arquivo = a2.arquivo
where a2.empresa = a.empresa) as funcionarios
from conta_table c
left join vw_arquivos a
on c.conta = a.conta
and a.situacao = 6
group by a.empresa, c.conta
)