AJUDA COM CONSULTA SQL, SUM E UNION

02/03/2020

0

Olá pessoal tudo bem?

Estou com problemas nessa consulta, preciso somar os dois valores de tipo de pagamento de ambas as tabelas.

Banco de dados Firebird 2.5.

Nessa consulta eu tenho a soma de forma de pagamento das respectivas tabelas, porém gostaria de saber se é possível somar os valores em uma única coluna.

Essa consulta me retorna exemplo.

TOTAL | TIPO
750,00 01
4100 01

Onde o 01 representa o código da forma de pagamento (Dinheiro), gostaria de somar esse dois valores.


 select sum(PV.total_cupom)as total,
       pv.tp_pgto as tipo
       from trans_PV PV
       where PV.data between :datai and :dataf
       and PV.id_empresa=:empresa
       and PV.sequencia > 705000
       and PV.sequencia < 706000
       and PV.condicao <> "C"
       and pv.tp_pgto <> " "
       group by tipo
UNION
select sum(C.total_cupom)as total,
       C.tp_pgto as tipo
       from TRANS_CF C
       where C.data between :datai and :dataf
       and C.id_empresa=:empresa
       and C.sequencia > 705000
       and C.sequencia < 706000
       and C.condicao <> "C"
       and C.tp_pgto <> '' "
       group by tipo
Bruno Divino

Bruno Divino

Responder

Post mais votado

03/03/2020

saiu um código duplicado na instrução. o correto é:
select
    tipo,
    sum(subtotal) total
from (
    select
        sum(PV.total_cupom) as subtotal,
        pv.tp_pgto as tipo
    from
        trans_PV PV
    where
        PV.data between :datai and :dataf
        and PV.id_empresa=:empresa
        and PV.sequencia > 705000
        and PV.sequencia < 706000
        and PV.condicao <> "C"
        and pv.tp_pgto <> " "
    group by
        tipo
    UNION
    select
        sum(C.total_cupom) as subtotal,
        C.tp_pgto as tipo
    from
        TRANS_CF C
    where
        C.data between :datai and :dataf
        and C.id_empresa=:empresa
        and C.sequencia > 705000
        and C.sequencia < 706000
        and C.condicao <> "C"
        and C.tp_pgto <> '' "
    group by
        tipo
) juncao
group by
    tipo

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

02/03/2020

Emerson Nascimento

tente algo assim:
select
	tipo,
	sum(subtotal) total
from (
	select
		sum(PV.total_cupom) as subtotal,
		pv.tp_pgto as tipo
	from
		trans_PV PV
	where
		PV.data between :datai and :dataf
		and PV.id_empresa=:empresa
		and PV.sequencia > 705000
		and PV.sequencia < 706000
		and PV.condicao <> "C"
		and pv.tp_pgto <> " "
	group by
		tipo
	UNION
	select
		sum(C.total_cupom) as subtotal,
		C.tp_pgto as tipo
	from
		TRANS_CF C
	where
		C.data between :datai and :dataf
		and C.id_empresa=:empresa
		and C.sequencia > 705000
		and C.sequencia < 706000
		and C.condicao <> "C"
		and C.tp_pgto <> '' "
	group by
		tipo
) juncao
group by
	tipo
) juncao
group by
	tipo
Responder

03/03/2020

Bruno Divino

tente algo assim:
select
	tipo,
	sum(subtotal) total
from (
	select
		sum(PV.total_cupom) as subtotal,
		pv.tp_pgto as tipo
	from
		trans_PV PV
	where
		PV.data between :datai and :dataf
		and PV.id_empresa=:empresa
		and PV.sequencia > 705000
		and PV.sequencia < 706000
		and PV.condicao <> "C"
		and pv.tp_pgto <> " "
	group by
		tipo
	UNION
	select
		sum(C.total_cupom) as subtotal,
		C.tp_pgto as tipo
	from
		TRANS_CF C
	where
		C.data between :datai and :dataf
		and C.id_empresa=:empresa
		and C.sequencia > 705000
		and C.sequencia < 706000
		and C.condicao <> "C"
		and C.tp_pgto <> '' "
	group by
		tipo
) juncao
group by
	tipo
) juncao
group by
	tipo



Emerson obrigado por responde, porém eu estou com uma dúvida, isso é um subselect correto.

O primeiro select
    Tipo,
    sum(subtotal) as total


Eu coloquei um as Total, acho que ficou faltando certo?
Também seguindo sua lógia coloquei um " ( " logo após o primeiro select, para fechar com o último do group by, é isso mesmo né?

Já na parte onde você digitou junção, devo fazer um join certo?
Responder

03/03/2020

Bruno Divino

saiu um código duplicado na instrução. o correto é:
select
    tipo,
    sum(subtotal) total
from (
    select
        sum(PV.total_cupom) as subtotal,
        pv.tp_pgto as tipo
    from
        trans_PV PV
    where
        PV.data between :datai and :dataf
        and PV.id_empresa=:empresa
        and PV.sequencia > 705000
        and PV.sequencia < 706000
        and PV.condicao <> "C"
        and pv.tp_pgto <> " "
    group by
        tipo
    UNION
    select
        sum(C.total_cupom) as subtotal,
        C.tp_pgto as tipo
    from
        TRANS_CF C
    where
        C.data between :datai and :dataf
        and C.id_empresa=:empresa
        and C.sequencia > 705000
        and C.sequencia < 706000
        and C.condicao <> "C"
        and C.tp_pgto <> '' "
    group by
        tipo
) juncao
group by
    tipo


Emerson, deu certo, muito obrigado!

Vou estudar melhor esse conceito de subselect!

Show de bola, resolvido.
Responder

03/03/2020

Bruno Divino

saiu um código duplicado na instrução. o correto é:
select
    tipo,
    sum(subtotal) total
from (
    select
        sum(PV.total_cupom) as subtotal,
        pv.tp_pgto as tipo
    from
        trans_PV PV
    where
        PV.data between :datai and :dataf
        and PV.id_empresa=:empresa
        and PV.sequencia > 705000
        and PV.sequencia < 706000
        and PV.condicao <> "C"
        and pv.tp_pgto <> " "
    group by
        tipo
    UNION
    select
        sum(C.total_cupom) as subtotal,
        C.tp_pgto as tipo
    from
        TRANS_CF C
    where
        C.data between :datai and :dataf
        and C.id_empresa=:empresa
        and C.sequencia > 705000
        and C.sequencia < 706000
        and C.condicao <> "C"
        and C.tp_pgto <> '''' "
    group by
        tipo
) juncao
group by
    tipo


Emerson, deu certo, muito obrigado!

Vou estudar melhor esse conceito de subselect!

Show de bola, resolvido.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar