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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 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 :)