AJUDA COM CONSULTA SQL, SUM E UNION

SQL

Firebird

02/03/2020

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

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

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
GOSTEI 1

Mais Respostas

Emerson Nascimento

Emerson Nascimento

02/03/2020

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
GOSTEI 0
Bruno Divino

Bruno Divino

02/03/2020

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?
GOSTEI 0
Bruno Divino

Bruno Divino

02/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, deu certo, muito obrigado!

Vou estudar melhor esse conceito de subselect!

Show de bola, resolvido.
GOSTEI 0
Bruno Divino

Bruno Divino

02/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, deu certo, muito obrigado!

Vou estudar melhor esse conceito de subselect!

Show de bola, resolvido.
GOSTEI 0
POSTAR