SQL Select - Utilizar campos criados e vários select dentro de um select
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
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
Curtidas 0
Respostas
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.
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
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.
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
16/05/2013
Dúvida 2:
creio que isso resolva:
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
16/05/2013
Não é o que eu preciso mas muito obrigado.
GOSTEI 0
Joel Rodrigues
16/05/2013
Na verdade é na tabela MOVFINANCEIROBAIXAS.
O que você precisa exatamente?
O que você precisa exatamente?
GOSTEI 0
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?
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
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.
Estou marcando este tópico como CONCLUÍDO.
Abraço.
GOSTEI 0