访问字段列表中的嵌套 select
Access nested select in field listing
有人向我提供了在数据库中搜索某些数据的查询,如下所示:
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"
并且当我将对 funcionarios
的引用替换为相同的嵌套 select 时,我在引用 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
但这看起来不是那么优化,也不是最好的方法。所以我的问题是...
有什么方法可以通过最后的除法运算 select 这些值,但比重复 folha
和 funcionarios
计算更优化?也许是一种引用这些已经计算出的值的方法。
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
)
有人向我提供了在数据库中搜索某些数据的查询,如下所示:
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"
并且当我将对 funcionarios
的引用替换为相同的嵌套 select 时,我在引用 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
但这看起来不是那么优化,也不是最好的方法。所以我的问题是...
有什么方法可以通过最后的除法运算 select 这些值,但比重复 folha
和 funcionarios
计算更优化?也许是一种引用这些已经计算出的值的方法。
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
)