Ajuda com union all
Estou utilizando um select com union all para tentar unir as informações somando ou subtraindo as os valores para cada funcionario.
Mais ao executar o código apresenta o seguinte resultado:
Exemplo:
Nome: Valor:
José 100
Maria 50
José -20
Maria -10
Eu gostaria que o resultado da pesquisa fique assim:
José 80
Maria 40
Segue o código que fiz:
Alguém poderia me ajudar com esse código]?
Mais ao executar o código apresenta o seguinte resultado:
Exemplo:
Nome: Valor:
José 100
Maria 50
José -20
Maria -10
Eu gostaria que o resultado da pesquisa fique assim:
José 80
Maria 40
Segue o código que fiz:
select
fun.nome as consultor,
sum ((pe.total_liquido + pe.v_ipi) - pe.desc_suframa) as VL_PRODUTO
from produtos_eventos pe
inner join produtos p on p.produto = pe.produto
inner join saidas s on s.saida = pe.cod_operacao
inner join cfop cf on cf.cfop = pe.cfop
left join funcionarios fun on fun.funcionario = s.funcionario
where s.data BETWEEN ''02/01/14'' AND ''02/28/14''
and pe.quantidade <> 0
and cf.nat_operacao in(''5.101'',''6.101'',''5.102'',''6.102'',''6.107'',''5.551'',''6.551'',''5.933'',''6.933'',''7.551'',''6.108'',''6.109'',''6.110'',''7.101'',''7.102'')
group by fun.nome
union all
select
fun.nome as consultor,
sum ((pe.total_liquido + pe.v_ipi) - pe.desc_suframa)* -1 as VL_PRODUTO
from produtos_eventos pe
inner join produtos p on p.produto = pe.produto
inner join entradas en on en.entrada = pe.cod_operacao and pe.tipo_operacao = en.tipo_operacao_e and en.cancelada = ''F''
inner join cfop cf on cf.cfop = pe.cfop
left join funcionarios fun on fun.funcionario = en.funcionario
where en.data BETWEEN ''02/01/14'' AND ''02/28/14''
and cf.nat_operacao in(''1.201'',''2.201'',''1.202'',''2.202'',''2.203'',''3.201'',''3.202'')
group by fun.nome
union all
select
fun.nome as consultor,
sum ((pe.total_liquido + pe.v_ipi) - pe.desc_suframa)* -1 as VL_PRODUTO
from produtos_eventos pe
inner join produtos p on p.produto = pe.produto
inner join entradas en on en.entrada = pe.cod_operacao and pe.tipo_operacao = en.tipo_operacao_e and en.cancelada = ''F''
inner join cfop cf on cf.cfop = pe.cfop
left join funcionarios fun on fun.funcionario = en.funcionario
where en.data BETWEEN ''02/01/14'' AND ''02/28/14''
and cf.cfop in(''107'',''125'',''153'',''155'')
group by fun.nome;
Alguém poderia me ajudar com esse código]?
Giuliano Santos
Curtidas 1
Respostas
Alex Lekao
29/04/2014
Ola Bom dia!!!
Como ficou o resultado? seria possivel posta-lo?
Nao sei se eh possivel com o Firebird mas vc ja experimentou coloca esse codigo todo em uma especie de tabela temporaria e fazer os calculos nela para ver se funciona?
Abraco.
Alex - Lekao
Como ficou o resultado? seria possivel posta-lo?
Nao sei se eh possivel com o Firebird mas vc ja experimentou coloca esse codigo todo em uma especie de tabela temporaria e fazer os calculos nela para ver se funciona?
Abraco.
Alex - Lekao
GOSTEI 0
Giuliano Santos
29/04/2014
Bom dia Alex,
consegui resolver esse problema agora pouco utilizando subquery. O código ficou assim:
consegui resolver esse problema agora pouco utilizando subquery. O código ficou assim:
select consultor,
sum (VL_PRODUTO)
from
(
select
fun.nome as consultor,
sum ((pe.total_liquido + pe.v_ipi) - pe.desc_suframa) as VL_PRODUTO
from produtos_eventos pe
inner join produtos p on p.produto = pe.produto
inner join saidas s on s.saida = pe.cod_operacao
inner join cfop cf on cf.cfop = pe.cfop
left join funcionarios fun on fun.funcionario = s.funcionario
where s.data BETWEEN '02/01/14' AND '02/28/14'
and pe.quantidade <> 0
and cf.nat_operacao in('5.101','6.101','5.102','6.102','6.107','5.551','6.551','5.933','6.933','7.551','6.108','6.109','6.110','7.101','7.102')
group by fun.nome
union all
select
fun.nome as consultor,
sum ((pe.total_liquido + pe.v_ipi) - pe.desc_suframa)* -1 as VL_PRODUTO
from produtos_eventos pe
inner join produtos p on p.produto = pe.produto
inner join entradas en on en.entrada = pe.cod_operacao and pe.tipo_operacao = en.tipo_operacao_e and en.cancelada = 'F'
inner join cfop cf on cf.cfop = pe.cfop
left join funcionarios fun on fun.funcionario = en.funcionario
where en.data BETWEEN '02/01/14' AND '02/28/14'
and cf.nat_operacao in('1.201','2.201','1.202','2.202','2.203','3.201','3.202')
group by fun.nome
union all
select
fun.nome as consultor,
sum ((pe.total_liquido + pe.v_ipi) - pe.desc_suframa)* -1 as VL_PRODUTO
from produtos_eventos pe
inner join produtos p on p.produto = pe.produto
inner join entradas en on en.entrada = pe.cod_operacao and pe.tipo_operacao = en.tipo_operacao_e and en.cancelada = 'F'
inner join cfop cf on cf.cfop = pe.cfop
left join funcionarios fun on fun.funcionario = en.funcionario
where en.data BETWEEN '02/01/14' AND '02/28/14'
and cf.cfop in('107','125','153','155')
group by fun.nome
) virtual
group by consultor
GOSTEI 0
Alex Lekao
29/04/2014
kkkk....
era justamente isso que ia te sugerir fazer, eu nao sabia que dava certo com Firebird. rsrsr
Eu uso muito esse recurso no SQL Server. rsrsr
Que bom que deu certo. Parabens!!!
obrigado por postar a solucao.
Abraco.
Alex - Lekao
era justamente isso que ia te sugerir fazer, eu nao sabia que dava certo com Firebird. rsrsr
Eu uso muito esse recurso no SQL Server. rsrsr
Que bom que deu certo. Parabens!!!
obrigado por postar a solucao.
Abraco.
Alex - Lekao
GOSTEI 0