Fórum Utilização do Union dentro do Execute Blocks #618309
30/06/2022
0
Boa tarde.
Estou com dificuldades em construir uma consulta SQL utilizando UNION dentro do Execute Block no FireBird 2.5.
Primeiramente FORA do execute blocks estou utilizando duas tabelas "contas_receber" e "contas_pagar" que não possuem relação entre si (e preciso utilizar union). Aí preciso colocar um filtro para as contas no status "A", em aberto, mas tô enfrentando dificuldades porque preciso apresentar o MÊS da data de emissão da conta, o VALOR A RECEBER e em outra coluna o VALOR A PAGAR, mas quando utilizo o union ele acaba colocando os meses e os valores a pagar logo abaixo dos que vão receber.
Adicionei as colunas TIPO e N° Mês para facilitar para vocês visualizarem quais são CP = Contas a pagar e CR = Contas a Receber, mas originalmente teriam apenas os campos Mês (tipo Janeiro, etc), Contas Receber(Soma de cada Mês) e Contas Pagar(Soma de cada Mês)
PRINT DO RESULTADO: https://prnt.sc/BIMlLsQdSR56
Aí pensei em corrigir dentro do Execute Blocks utilizando variáveis, mas não sei como ficaria a estrutura de um union dentro do execute blocks por conta dos "returns". Por hora consegui replicar o resultado de antes dentro do execute blocks, mas como faço para colocar as informações de CP em outra coluna?
PRINT DO RESULTADO USANDO EXECUTE BLOCKS: https://prnt.sc/SVegUcNKmRFb
RESULTADO FINAL ESPERADO: https://prnt.sc/PPJlrg_hwqQx
Estou com dificuldades em construir uma consulta SQL utilizando UNION dentro do Execute Block no FireBird 2.5.
Primeiramente FORA do execute blocks estou utilizando duas tabelas "contas_receber" e "contas_pagar" que não possuem relação entre si (e preciso utilizar union). Aí preciso colocar um filtro para as contas no status "A", em aberto, mas tô enfrentando dificuldades porque preciso apresentar o MÊS da data de emissão da conta, o VALOR A RECEBER e em outra coluna o VALOR A PAGAR, mas quando utilizo o union ele acaba colocando os meses e os valores a pagar logo abaixo dos que vão receber.
Adicionei as colunas TIPO e N° Mês para facilitar para vocês visualizarem quais são CP = Contas a pagar e CR = Contas a Receber, mas originalmente teriam apenas os campos Mês (tipo Janeiro, etc), Contas Receber(Soma de cada Mês) e Contas Pagar(Soma de cada Mês)
select
case extract (month from cr.data_emissao)
when 1 then ''Janeiro''
when 2 then ''Fevereiro''
when 3 then ''Março''
when 4 then ''Abril''
when 5 then ''Maio''
when 6 then ''Junho''
when 7 then ''Julho''
when 8 then ''Agosto''
when 9 then ''Setembro''
when 10 then ''Outubro''
when 11 then ''Novembro''
when 12 then ''Dezembro''
end"Mês", sum(cr.valor_aberto)"Valor a Receber", extract (month from cr.data_emissao)"N° do Mês",''CR''"TIPO"
from contas_receber cr
where cr.status = ''A''
group by extract (month from cr.data_emissao)
union all
select
case extract (month from cp.data_emissao)
when 1 then ''Janeiro''
when 2 then ''Fevereiro''
when 3 then ''Março''
when 4 then ''Abril''
when 5 then ''Maio''
when 6 then ''Junho''
when 7 then ''Julho''
when 8 then ''Agosto''
when 9 then ''Setembro''
when 10 then ''Outubro''
when 11 then ''Novembro''
when 12 then ''Dezembro''
end"Mês",sum(cp.valor_aberto)"Valor a Pagar", extract (month from cp.data_emissao)"N° do Mês",''CP''"TIPO"
from contas_pagar cp
where cp.status = ''A''
group by extract (month from cp.data_emissao)
order by 3
PRINT DO RESULTADO: https://prnt.sc/BIMlLsQdSR56
Aí pensei em corrigir dentro do Execute Blocks utilizando variáveis, mas não sei como ficaria a estrutura de um union dentro do execute blocks por conta dos "returns". Por hora consegui replicar o resultado de antes dentro do execute blocks, mas como faço para colocar as informações de CP em outra coluna?
execute block
returns ("Mês" varchar(15), r_valorCR numeric(15,2),r_valorCP numeric(15,2), r_saldo numeric (15,2))
as
begin
for
select
case extract (month from cr.data_emissao)
when 1 then ''Janeiro''
when 2 then ''Fevereiro''
when 3 then ''Março''
when 4 then ''Abril''
when 5 then ''Maio''
when 6 then ''Junho''
when 7 then ''Julho''
when 8 then ''Agosto''
when 9 then ''Setembro''
when 10 then ''Outubro''
when 11 then ''Novembro''
when 12 then ''Dezembro''
end"Mês", sum(cr.valor_aberto)"Valor a Receber"
from contas_receber cr
where cr.status = ''A''
group by extract (month from cr.data_emissao)
union all
select
case extract (month from cp.data_emissao)
when 1 then ''Janeiro''
when 2 then ''Fevereiro''
when 3 then ''Março''
when 4 then ''Abril''
when 5 then ''Maio''
when 6 then ''Junho''
when 7 then ''Julho''
when 8 then ''Agosto''
when 9 then ''Setembro''
when 10 then ''Outubro''
when 11 then ''Novembro''
when 12 then ''Dezembro''
end"Mês",sum(cp.valor_aberto)"Valor a Pagar"
from contas_pagar cp
where cp.status = ''A''
group by extract (month from cp.data_emissao)
into "Mês", r_valorCR
do
begin
suspend;
end
end
PRINT DO RESULTADO USANDO EXECUTE BLOCKS: https://prnt.sc/SVegUcNKmRFb
RESULTADO FINAL ESPERADO: https://prnt.sc/PPJlrg_hwqQx
Ganso Ltda
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)