SUM - Somar resultado de dois sum

10/11/2021

0

Olá meus amigos(as), preciso somar o resultado do (sum(ss.qtde * i.vlrmed) saida,) com (sum(ss.qtde * i.vlrmed) saida,), alguém me ajude por favor.


select
data,
doc,
grupo,
cdc,
cod,
matmed,
und,
saida_qtde,
cast(custo as numeric (10,2))custo,
cast(saida as numeric (10,2)) saida,
devol_qtde,
cast(devol as numeric (10,2)) devol
from (
select
s.data,
s.doc,
'SAIDA' movimentacao,
(select first 1 g.nome from gegrupos g where g.cod = i.gru) grupo,
(select first 1 nome from tbcencus where cod=s.cdc) cdc,
ss.item cod,
i.nome matmed,
i.uni_con und,
sum(qtde)saida_qtde,
cast(i.vlrmed as numeric (10,2))custo,
sum(ss.qtde * i.vlrmed) saida,
0 devol_qtde,
0 devol
from gecadsai s
left join gelansai ss on s.ano=ss.ano and s.mes=ss.mes and s.doc=ss.doc
left join geitens i on ss.item=i.cod
where ss.consol='T'
and s.data between :data1 and :data2
group by
s.data,
s.doc,
i.gru,
s.cdc,
ss.item,
i.nome,
i.uni_con,
s.data,
i.vlrmed,
ss.qtde

UNION

select
d.data,
d.doc,
'DEVOLUÇÃO' movimentacao,
(select first 1 g.nome from gegrupos g where g.cod = ii.gru) grupo,
(select max(nome) from tbcencus where cod=d.cdc) cdc,
l.item cod,
ii.nome matmed,
ii.uni_con und,
0 saida,
0 saida_qtde,
sum(qtde)devol_qtde,
cast(ii.vlrmed as numeric (10,2))custo,
sum(l.qtde * ii.vlrmed) devol
from gecaddev d
left join gelandev l on d.id=l.id_gecaddev
left join geitens ii on l.item=ii.cod
where l.consol='T'
and d.data between :data1 and :data2
group by
d.data,
d.doc,
ii.gru,
d.cdc,
l.item,
ii.nome,
ii.uni_con,
d.data,
ii.vlrmed,
l.qtde
)
order
by cdc,
matmed,
cod
Marcos Batista

Marcos Batista

Responder

Posts

16/11/2021

Anderson Gonçalves

Olá meus amigos(as), preciso somar o resultado do (sum(ss.qtde * i.vlrmed) saida,) com (sum(ss.qtde * i.vlrmed) saida,), alguém me ajude por favor.


select
data,
doc,
grupo,
cdc,
cod,
matmed,
und,
saida_qtde,
cast(custo as numeric (10,2))custo,
cast(saida as numeric (10,2)) saida,
devol_qtde,
cast(devol as numeric (10,2)) devol
from (
select
s.data,
s.doc,
'SAIDA' movimentacao,
(select first 1 g.nome from gegrupos g where g.cod = i.gru) grupo,
(select first 1 nome from tbcencus where cod=s.cdc) cdc,
ss.item cod,
i.nome matmed,
i.uni_con und,
sum(qtde)saida_qtde,
cast(i.vlrmed as numeric (10,2))custo,
sum(ss.qtde * i.vlrmed) saida,
0 devol_qtde,
0 devol
from gecadsai s
left join gelansai ss on s.ano=ss.ano and s.mes=ss.mes and s.doc=ss.doc
left join geitens i on ss.item=i.cod
where ss.consol='T'
and s.data between :data1 and :data2
group by
s.data,
s.doc,
i.gru,
s.cdc,
ss.item,
i.nome,
i.uni_con,
s.data,
i.vlrmed,
ss.qtde

UNION

select
d.data,
d.doc,
'DEVOLUÇÃO' movimentacao,
(select first 1 g.nome from gegrupos g where g.cod = ii.gru) grupo,
(select max(nome) from tbcencus where cod=d.cdc) cdc,
l.item cod,
ii.nome matmed,
ii.uni_con und,
0 saida,
0 saida_qtde,
sum(qtde)devol_qtde,
cast(ii.vlrmed as numeric (10,2))custo,
sum(l.qtde * ii.vlrmed) devol
from gecaddev d
left join gelandev l on d.id=l.id_gecaddev
left join geitens ii on l.item=ii.cod
where l.consol='T'
and d.data between :data1 and :data2
group by
d.data,
d.doc,
ii.gru,
d.cdc,
l.item,
ii.nome,
ii.uni_con,
d.data,
ii.vlrmed,
l.qtde
)
order
by cdc,
matmed,
cod



Se o seu banco de dados for FIREBIRD pesquise o comando "WITH" ele pode te ajudar.

Exemplo:

With
SomaSalario as(
Select
Sum(sal.salario)as SomaSalario,
sal.CodFuncionario
from TbSalario sal
Group by sal.CodFuncionario
),
SomaDescontos as(
select
sum(des.desconto)as SomaDesconto,
des.CodFuncionario
from TbDesconto
Group by des.CodFuncionario
)
Select
Coalesce(Salario.SomaSalario,0)as TotalSalario,
Coalesce(Desconto.SomaDesconto,0)as TotalDesconto,
Coalesce(
Coalesce(Salario.SomaSalario,0) - Coalesce(Desconto.SomaDesconto,0),0)as Saldo
from tbFuncionario Fun
left join SomaSalario Salario
on Salario.CodFuncionario = Fun.CodFuncionario
left join SomaDesconto Desconto
on Desconto.CodFuncionario = Fun.CodFuncionario


Tentando Explicar...

Na parte de cima do select você faz a somatória de todos os salários de um funcionário, logo depois você soma todos os descontos e em na última select você busca esses valores por FUNCIONÁRIO e faz o cálculo para mostrar o SALDO.

Antes que você pergunte o comando COALESCE é para evitar valores NULOS, porque na hora de calcular vai dar erro se o valor for nulo então se for nulo ele atribui ZERO nesse caso ai.

Espero ter pelo menos te dado uma luz.

Chama se quiser.
Email/Skype: anderson@case13.com.br
Responder

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

Aceitar