SQL UNION E GROUPBY
02/01/2015
0
USO INTERBASE 6.5.
Preciso fazer uma consulta SQL onde me retorne o valor da comissão do vendedor abatendo as devoluções feitas no mesmo período.
Segue SQL e o resultado obtido:
SELECT TAB026.nvendedor, Tab017.tdescricao, SUM(TAB027.ntotal * (TAB006.ncomissao)/100) as Comissao FROM TAB017, TAB027, TAB026, TAB006 WHERE (Tab017.chave = Tab026.nvendedor) AND (Tab027.nnumero = Tab026.chave) AND (TAB027.nproduto = TAB006.nproduto) AND (TAB027.ttabela = Tab006.tdescricao) AND (Tab026.DDATA BETWEEN '29.12.2014 00:00' AND '29.12.2014 23:59') AND tab026.nempresa = 1 AND TAB026.tcfop = '5.102' AND tab026.ndocumentoprincipal IS NOT NULL Group BY TAB026.nvendedor, Tab017.tdescricao union SELECT Tab026.nvendedor, TAB017.tdescricao, (SUM(TAB083.ntotal * (TAB006.ncomissao)/100)*-1) as ComissaoDV FROM tab082, TAB083, TAB026, TAB017, TAB006 where TAB082.chave = Tab083.nnumero AND TAB026.chave = TAB082.npedido AND TAB017.chave = TAB026.nvendedor AND TAB006.tdescricao = TAB083.ttabela AND TAB006.nproduto = TAB083.nproduto AND (Tab082.DDATA BETWEEN '29.12.2014 00:00' AND '29.12.2014 23:59') Group BY TAB026.nvendedor, Tab017.tdescricao
O Resultado:
[img:descricao=Resultado Sql]http://arquivo.devmedia.com.br/forum/imagem/404598-20150102-164437.png[/img]
Preciso que a coluna comissão tenha o resultado da comissão devida já descontando o valor negativo referente a devolução no período.
Agradeço desde já a ajuda.
Abraço
Roberto
Posts
05/01/2015
Roberto
Alex, já tinha visto sobre a soma do Resultado, mas obrigado por avisa.
Marisiana estou tentando fazer o que me sugeriu mas ainda sem resultado. Estou olhando as chaves conforme vc me orientou e sobre a ligação da Tab027 com a TAB082 é TAB082.npedido = TAB027.nnumero é a unica ligação entre elas que é o Numero do pedido. O que eu estou vendo aqui com mais calma e acabei achando um outro impasse.
Os pedido são gravados como PEDIDO PAI(TAB026) e PRODUTOS PEDIDO PAI(TAB027) e deste pedido pai é gerado pelo menos 1 pedido FILHO que é o pedido de ENTREGA. e as devoluções só são geradas por esses pedidos de entrega. O Problema do valor das comissões estarem alem do esperado se deve a duplicidade destes pedidos, PAI e Filho.
Eu sei que fica difícil pra vcs saberem o que ocorre devido não saber as estruturas da tabela e dos dados, por isso agradeço e muito o esforço. Estou vendo aqui como resolver isso e logo coloco o resultado.
Obrigado
Abraço
05/01/2015
Alex Lekao
Precisando de algo posta ae, se estiver ao meu alcanco a gente ve o que consegue. rsrsr
Abraco.
06/01/2015
Marisiana Battistella
Esses pedidos de ENTREGA são identificados como?
Eles são cadastrados na tabela q contém os pedidos FILHOS?
Existe algum campo TIPO que diferencie um do outro?
06/01/2015
Roberto
Espero que não tenha te confundido mais. Olhe no primeiro post as consultas ligadas pelo union. VC entenderá melhor.
Obrigado
Abraço
06/01/2015
Marisiana Battistella
Você identifica os documentos que são devoluções atrás desses dois filtros:?
AND TAB026.tcfop = ''5.102/P'' AND TAB026.ndocumentoprincipal IS NOT NULL
06/01/2015
Marisiana Battistella
SELECT TAB026.nvendedor, TAB017.tdescricao, CASE WHEN TAB026.tcfop = '5.102/P' AND TAB026.ndocumentoprincipal IS NOT NULL THEN SUM(TAB027.ntotal * (TAB006.ncomissao)/100) END as Comissao, (SUM(TAB083.ntotal * (TAB006.ncomissao)/100) * - 1) as ComissaoDev, ( CASE WHEN TAB026.tcfop = '5.102/P' AND TAB026.ndocumentoprincipal IS NOT NULL THEN SUM(TAB027.ntotal * (TAB006.ncomissao)/100) END - (SUM(TAB083.ntotal * (TAB006.ncomissao)/100) * - 1) ) as resultado FROM TAB017 INNER JOIN TAB026 ON TAB017.chave = TAB026.nvendedor INNER JOIN TAB027 ON Tab027.nnumero = TAB026.chave INNER JOIN TAB006 ON TAB006.nproduto= TAB027.nproduto AND TAB006.tdescricao = TAB027.ttabela LEFT JOIN TAB083 ON TAB083.ttabela = TAB006.tdescricao AND TAB083.nproduto = TAB006.nproduto LEFT JOIN TAB082 ON TAB082.chave = TAB083.nnumero INNER JOIN TAB017 ON TAB017.chave = TAB026.nvendedor WHERE TAB026.DDATA BETWEEN '29.12.2014 00:00' AND '29.12.2014 23:59' AND TAB082.ddata BETWEEN '29.12.2014 00:00' AND '29.12.2014 23:59' AND TAB026.nempresa = 1 Group BY TAB026.nvendedor, TAB017.tdescricao
07/01/2015
Roberto
Ta difícil, rsrs....o interbase que uso é o 6.0 e ele não aceita CASE e nem SubSelect após o From.
Não estou conseguindo gerar uma unica consulta acredito que por esse motivo. Como não posso gerar View ai ficou quase impossível.
Agradeço a ajuda de vcs imensamente. Estou tentando achar a solução e estou testando cada sugestão de vcs e revendo para ver se consigo.
Muito Obrigado e assim que tiver novas noticias informo a vcs.
Grande Abraço
07/01/2015
Alex Lekao
Verifica se na sua versao do interbase ja existe o comando DECODE, ele tem no Oracle, nao sei a partir de qdo, no firebird parece que existe desde a versao 1.5, ele eh similar ao case.
Se me lembro bem no que pesquisei seria mais ou menos assim:
DECODE(1,'UM',2,'DOIS')
Mas teria que pesquiser a sintaxe. rsrsr
Abraco.
07/01/2015
Marisiana Battistella
Como é ruim não ter os recursos necessários pra trabalhar...
Bom trabalho!
07/01/2015
Alex Lekao
o ERP da Software house que usamos anteriormente nao dava a possibilidade de implementarmos relatorios proprios e utilizamos Firebird, nossa como era trabalhoso.
Montava relatorios fazendo coleta de dados no banco e depois manipulando o restante dos dados no Excel e enviava para os responsaveis, muito trabalho. rsrs
Hj desenvolvo o que preciso usando comandos sql e tags proprias do ERP, nossa estou no paraiso. rsrsr
E olha que manjo quase nada de SQL. rsrsr
Como é ruim não ter os recursos necessários pra trabalhar...
Bom trabalho!
07/01/2015
Roberto
Em meio a essas dificuldades e a urgência neste relatório eu utilizei as duas consultas separadas, a de comissão e a de devolução em Query no Delphi e então fiz a manipulação necessária onde pude obter o resultado tão esperado.
Marisiana e Alex Agradeço mesmo.
Sem os recursos é quase impossível de eu conseguir fazer rodar em um único script, eu sei pouco de SQL e por isso também não consigo passar tudo o que ocorre pra vcs. Que me ajudaram e muito mesmo não sabendo a estrutura do banco.
Deixo como RESOLVIDO pois de qualquer maneira consegui o resultado esperado.
Forte Abraço,
Estarei mais presente neste Fórum e espero contar com a ajuda de vcs e também eu ajudar no que eu souber.
t+
Beto
08/01/2015
Marisiana Battistella
Participe sempre que puder!
08/01/2015
Alex Lekao
Disponha, precisando eh so falar.
Bem vindo ao forum!!!
Clique aqui para fazer login e interagir na Comunidade :)