Utilização do Union dentro do Execute Blocks
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 :)