SQL Select - Utilizar campos criados e vários select dentro de um select

Firebird

16/05/2013

Estou com 2 dúvidas sobre um SQL que preciso fazer.

Dúvida 1

select sum(b.valor_pago) as soma_pago,
(a.valor_parcela - soma_pago) as valor_restante
from movfinanceiro a
left outer join movfinanceiro_baixas
where (valor_restante > 0)

Preciso utilizar os campos criado com "as" para calculo e condição, só que assim aparece o seguinte erro:

SQL error code = -206.
Column unknown.

Como citar os campos criados?

Dúvida 2

select a.id_financeiro,
(select sum(b.valor_juros) from movfinanceiro_baixas b where b.id_financeiro = a.id_financeiro) as soma_juros,
(select sum(b.valor_desconto) from movfinanceiro_baixas b where b.id_financeiro = a.id_financeiro) as soma_desconto,
(select sum(b.valor_pago) from movfinanceiro_baixas b where b.id_financeiro = a.id_financeiro) as soma_pago
from movfinanceiro a

Tem como simplificar esse tanto de SELECT dentro do SELECT principal?

Desde já obrigado
Huelbert Oliveira

Huelbert Oliveira

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

16/05/2013

Dúvida 1:

No SQL Server existe um comando WITH, que permite criar uma consulta e depois fazer uma consulta sobre o resultado dessa consulta original, utilizando os campos nomeados com AS. Infelizmente não sei se há algo equivalente no Firbird, caso não haja, tem de repetir a expressão toda sempre que precisar referenciá-la.
GOSTEI 0
Huelbert Oliveira

Huelbert Oliveira

16/05/2013

Obrigado pela dica!!!

Ficou assim:

with financeiro_baixas as (
select id_financeiro,
sum(valor_juros) as valor_juros,
sum(valor_desconto) as valor_desconto,
sum(valor_pago) as valor_pago
from movfinanceiro_baixas
group by id_financeiro
)
select *, coalesce(valor_juros,0) as valor_juros, coalesce(valor_desconto,0) as valor_desconto, coalesce(valor_pago,0) as valor_pago from movfinanceiro a
left outer join financeiro_baixas b on b.id_financeiro = a.id_financeiro

Vou continuar o post somente pra saber sobre a 2 dúvida.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/05/2013

Dúvida 2:

creio que isso resolva:

SELECT 
ID_FINANCEIRO, SUM(VALOR_JUROS) AS SOMA_JUROS, SUM(VALOR_DESCONTO) AS SOMA_DESCONTO, SUM(VALOR_PAGO) AS SOMA_PAGO
FROM
MOVFINANCEIRO
GROUP BY
ID_FINANCEIRO
GOSTEI 0
Huelbert Oliveira

Huelbert Oliveira

16/05/2013

Não é o que eu preciso mas muito obrigado.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/05/2013

Na verdade é na tabela MOVFINANCEIROBAIXAS.
O que você precisa exatamente?
GOSTEI 0
Huelbert Oliveira

Huelbert Oliveira

16/05/2013

Meu problema foi resolvido, o que queria saber e como simplificar esse caso:

select a.id_financeiro,
(select sum(b.valor_juros) from movfinanceiro_baixas b where b.id_financeiro = a.id_financeiro) as soma_juros,
(select sum(b.valor_desconto) from movfinanceiro_baixas b where b.id_financeiro = a.id_financeiro) as soma_desconto,
(select sum(b.valor_pago) from movfinanceiro_baixas b where b.id_financeiro = a.id_financeiro) as soma_pago
from movfinanceiro a

por exemplo:

select a.id_financeiro,
(select sum(b.valor_juros), sum(b.valor_desconto), sum(b.valor_pago) from movfinanceiro_baixas b where b.id_financeiro = a.id_financeiro) ????
from movfinanceiro a

entendeu?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/05/2013

Entendi. Eu ainda acho que bastaria a query interna agrupando pelo id, mas se resolveu, tá beleza.
Estou marcando este tópico como CONCLUÍDO.
Abraço.
GOSTEI 0
POSTAR