Jump to content

Recommended Posts

Boa tarde a todos, os script abaixo me trás de dentro da tabela de pedidos, todos os produtos vendidos em determinando período, não pode haver duplicação de código do produto, mais esta gerando.

Colunas de retorno da consulta : Código, Produto, volume, Vlr Negociado, Vlr de Tabela, Total da Venda, Custo, Custo x Qtde, Vlr Desconto.

Preciso remover a duplicidade, alguém pode ajudar. 

 

SELECT
X.CODPROD
,X.DESCRPROD
,X.CODVOL
,SUM(X.QTDNEG) AS QTDNEG
,ROUND(SUM(X.VLRTOT_ITEM),2) AS VLRTOT_NEGOCIADO
,ROUND(X.PRECOBASE,4) AS VLR_TABELA
,ROUND(SUM(X.TOTAL_VENDA),2) AS TOTAL_VENDA

SELECT
--X.NUNOTA
X.CODPROD
,X.DESCRPROD
,X.CODVOL
,SUM(X.QTDNEG) AS QTDNEG
,ROUND(SUM(X.VLRTOT_ITEM),2) AS VLRTOT_NEGOCIADO
,ROUND(X.PRECOBASE,4) AS VLR_TABELA
,ROUND(SUM(X.TOTAL_VENDA),2) AS TOTAL_VENDA
,X.CUSTO
,SUM(X.CUSTO * X.QTDNEG) AS CUSTO_X_QTDE
,ROUND(SUM(X.VALOR_DESCONTO),2) AS VALOR_DESCONTO

FROM (SELECT
ITE.CODPROD,
PRO.DESCRPROD,
ITE.CODVOL,
ITE.PRECOBASE,
--CAB.NUNOTA,
EXC.VLRVENDA,
ITE.QTDNEG,

CASE WHEN CAB.CODTIPOPER = '51' THEN
SUM((ITE.VLRTOT - ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
ELSE
SUM((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
END AS VLRTOT_ITEM,

CASE WHEN CAB.CODTIPOPER = '51' THEN
SUM((ITE.PRECOBASE * ITE.QTDNEG) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
ELSE
SUM((ITE.PRECOBASE * ITE.QTDNEG + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
END AS TOTAL_VENDA,

CASE WHEN CAB.CODTIPOPER = '51' THEN
SUM((ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
ELSE
SUM((ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
END AS VALOR_DESCONTO,

CASE WHEN CAB.CODTIPOPER = '51' THEN
ROUND(SUM((ITE.VLRTOT - ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE)))) / (SELECT SUM((ITE.VLRTOT - ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
FROM TGFCAB CAB, TGFITE ITE, TGFPRO PRO
WHERE CAB.NUNOTA = ITE.NUNOTA
AND CAB.DTNEG BETWEEN '01-01-2018' AND '06-03-2018'
AND ITE.CODPROD = PRO.CODPROD
AND CAB.TIPMOV = 'P'
AND CAB.CODPARC NOT IN(62,63,64,65,66,67,1043)
AND CAB.CODTIPOPER IN (4,17,49,51,52,53,54,63,66,89,133,135,136,142,143,145,147,165)
AND PRO.USOPROD <> 'M') *100,2)
ELSE
ROUND(SUM((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE)))) / (SELECT SUM((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE)))) FROM TGFCAB CAB, TGFITE ITE, TGFPRO PRO
WHERE CAB.NUNOTA = ITE.NUNOTA 
AND CAB.DTNEG BETWEEN '01-01-2018' AND '14-03-2018'
AND ITE.CODPROD = PRO.CODPROD
AND CAB.TIPMOV = 'P'
AND PRO.CODGRUPOPROD NOT IN(01050000,01050101)
AND CAB.CODPARC NOT IN(62,63,64,65,66,67,1043)
AND CAB.CODTIPOPER IN (4,17,49,51,52,53,54,63,66,89,133,135,136,142,143,145,147,165)
AND PRO.USOPROD <> 'M' ) *100,2)
END AS PORCENTAGEM,
(SELECT
  EXC.VLRVENDA
  FROM TGFEXC EXC
  WHERE EXC.NUTAB = 36 AND EXC.CODPROD = ITE.CODPROD
)CUSTO

FROM TGFCAB CAB INNER JOIN TGFITE ITE ON (CAB.NUNOTA = ITE.NUNOTA)
                INNER JOIN TGFPRO PRO ON (ITE.CODPROD = PRO.CODPROD)
                INNER JOIN TGFEXC EXC ON (EXC.CODPROD = ITE.CODPROD)

WHERE CAB.TIPMOV = 'P'
AND CAB.DTNEG BETWEEN '01-01-2018' AND '06-03-2018'
AND CAB.CODPARC NOT IN(62,63,64,65,66,67,1043)
AND PRO.CODGRUPOPROD NOT IN(01050101,01050102,01050103)
AND CAB.CODTIPOPER IN (4,17,49,51,52,53,54,63,66,89,133,135,136,142,143,145,147,165)
AND PRO.USOPROD <> 'M'

GROUP BY ITE.CODPROD,PRO.DESCRPROD,ITE.CODVOL,ITE.PRECOBASE,ITE.VLRDESC,CAB.CODTIPOPER,EXC.VLRVENDA,CAB.NUNOTA,ITE.QTDNEG

) X
GROUP BY X.CODPROD,X.DESCRPROD,X.CODVOL,X.QTDNEG,X.TOTAL_VENDA,X.PRECOBASE,X.VALOR_DESCONTO,X.CUSTO--,X.NUNOTA

ORDER BY X.QTDNEG DESC;

,X.CUSTO
,SUM(X.CUSTO * X.QTDNEG) AS CUSTO_X_QTDE
,ROUND(SUM(X.VALOR_DESCONTO),2) AS VALOR_DESCONTO

FROM (SELECT
ITE.CODPROD,
PRO.DESCRPROD,
ITE.CODVOL,
ITE.PRECOBASE,
EXC.VLRVENDA,
ITE.QTDNEG,

CASE WHEN CAB.CODTIPOPER = '51' THEN
SUM((ITE.VLRTOT - ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
ELSE
SUM((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
END AS VLRTOT_ITEM,

CASE WHEN CAB.CODTIPOPER = '51' THEN
SUM((ITE.PRECOBASE * ITE.QTDNEG) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
ELSE
SUM((ITE.PRECOBASE * ITE.QTDNEG + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
END AS TOTAL_VENDA,

CASE WHEN CAB.CODTIPOPER = '51' THEN
SUM((ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
ELSE
SUM((ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
END AS VALOR_DESCONTO,

CASE WHEN CAB.CODTIPOPER = '51' THEN
ROUND(SUM((ITE.VLRTOT - ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE)))) / (SELECT SUM((ITE.VLRTOT - ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
FROM TGFCAB CAB, TGFITE ITE, TGFPRO PRO
WHERE CAB.NUNOTA = ITE.NUNOTA
AND CAB.DTNEG BETWEEN '01-01-2018' AND '06-03-2018'
AND ITE.CODPROD = PRO.CODPROD
AND CAB.TIPMOV = 'P'
AND CAB.CODPARC NOT IN(62,63,64,65,66,67,1043)
AND CAB.CODTIPOPER IN (4,17,49,51,52,53,54,63,66,89,133,135,136,142,143,145,147,165)
AND PRO.USOPROD <> 'M') *100,2)
ELSE
ROUND(SUM((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE)))) / (SELECT SUM((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE)))) FROM TGFCAB CAB, TGFITE ITE, TGFPRO PRO
WHERE CAB.NUNOTA = ITE.NUNOTA 
AND CAB.DTNEG BETWEEN '01-01-2018' AND '14-03-2018'
AND ITE.CODPROD = PRO.CODPROD
AND CAB.TIPMOV = 'P'
AND PRO.CODGRUPOPROD NOT IN(01050000,01050101)
AND CAB.CODPARC NOT IN(62,63,64,65,66,67,1043)
AND CAB.CODTIPOPER IN (4,17,49,51,52,53,54,63,66,89,133,135,136,142,143,145,147,165)
AND PRO.USOPROD <> 'M' ) *100,2)
END AS PORCENTAGEM,
(SELECT
  EXC.VLRVENDA
  FROM TGFEXC EXC
  WHERE EXC.NUTAB = 36 AND EXC.CODPROD = ITE.CODPROD
)CUSTO

FROM TGFCAB CAB INNER JOIN TGFITE ITE ON (CAB.NUNOTA = ITE.NUNOTA)
                INNER JOIN TGFPRO PRO ON (ITE.CODPROD = PRO.CODPROD)
                INNER JOIN TGFEXC EXC ON (EXC.CODPROD = ITE.CODPROD)

WHERE CAB.TIPMOV = 'P'
AND CAB.DTNEG BETWEEN '01-01-2018' AND '06-03-2018'
AND CAB.CODPARC NOT IN(62,63,64,65,66,67,1043)
AND PRO.CODGRUPOPROD NOT IN(01050101,01050102,01050103)
AND CAB.CODTIPOPER IN (4,17,49,51,52,53,54,63,66,89,133,135,136,142,143,145,147,165)
AND PRO.USOPROD <> 'M'

GROUP BY ITE.CODPROD,PRO.DESCRPROD,ITE.CODVOL,ITE.PRECOBASE,ITE.VLRDESC,CAB.CODTIPOPER,EXC.VLRVENDA,CAB.NUNOTA,ITE.QTDNEG

) X
GROUP BY X.CODPROD,X.DESCRPROD,X.CODVOL,X.QTDNEG,X.TOTAL_VENDA,X.PRECOBASE,X.VALOR_DESCONTO,X.CUSTO--,X.NUNOTA

ORDER BY X.QTDNEG DESC;

Share this post


Link to post
Share on other sites

Primeiro indente a sql é a publique com a tag code.

<>

Segundo explique as tabelas e os relacionamentos e o que se espera como resultado.

 

Terceiro sendo Oracle e pelo "cheiro" da sql pesquise pelas "analytic function" poiscelas facilitam consultas analíticas.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By FelipeCostaFT
      Estou iniciando uma startup para ajudar os devs a entrarem no mercado de trabalho mais preparados
      e, por isso, com maior chance de arrumar um bom emprego.

      Mas gostaria de saber como está sendo a realidade de vocês nesse momento de encarar o mercado.
      Alguém já está nessa fase ou até dentro do mercado poderia me ajudar? Esse forms dura 1 minuto pra
      responder e vai nos auxiliar a descobrir como ajudá-los a chegar lá mais rápido.
       
      link do forms
    • By MikeDaUmbrella
      Olá, boa noite.
      Alguém aqui pode me ajudar em fazer uma function ou um codigo simples para gerar e checar senhas usando o bcrypt.
      Agradeço.
      Um código para GERAR onde o resultado sai para uma varável (assim posso fazer para salvar no banco de dados)
      Um código para pegar via POST a senha e checar se é igual a senha salva do bcrypt.
    • By mtwzim
      Olá pessoal, recentemente eu venho desenvolvendo um app para pagamentos/cartões pré-pago, e estou procurando alguma empresa/api que forneça um serviço apara emissão de cartões pré-pagos (e que seja possível customizar os cartões: por a minha própria logo, etc), alguém pode me informar alguma empresa que faz isso aqui no brasil? Já encontrei soluções como stripe mas eles não oferecem esse serviço para o brasil?
    • By Rzorr
      Bom dia,
              eu tenho um  site de imóveis, sou corretor, ele está com alguns problemas na URL, comprei esse script e venho fazendo algumas alterações nele, sei o básico, cadastrar, deletar, buscar, update, mas o que acontece esse site foi construido com MVC e confesso parei de estudar PHP faz muito tempo, e não entendo nada de MVC, abaixo o código da busca e como forma o link é montado.
          No site o link fica assim: /imoveis/lista/referencia/referencia/categoria/comprar/tipo/tipo/cidade/Camboriú/bairro/bairro#busca nesse exemplo fiz uma busca pela cidade!
         Se clico no menu em vendas o link fica assim: /imoveis/lista/referencia/referencia/categoria/comprar/tipo/tipo/cidade/cidade/bairro/bairro#busca
      pessoal obrigado pela disposição em ajudar, eu to tentando resolver faz dias, mas não consigo entender a a forma como é construido.
       
      <?php class busca extends controller { public function init(){ } public function inicial(){ $referencia = $this->post('referencia'); $categoria = $this->post('categoria'); $tipo = $this->post('tipo'); $cidade = $this->post('cidade'); $bairro = $this->post('bairro'); if($referencia){ $cidade = "cidade"; $bairro = "bairro"; $tipo = "tipo"; $categoria = "categoria"; } else { $referencia = 'referencia'; if(!$categoria){ $categoria = "categoria"; } if(!$tipo){ $tipo = "tipo"; } if(!$cidade){ $cidade = "cidade"; } if(!$bairro){ $bairro = "bairro"; } } $endereco = DOMINIO."imoveis/lista/referencia/$referencia/categoria/$categoria/tipo/$tipo/cidade/$cidade/bairro/$bairro#busca"; $this->irpara("$endereco"); }  
    • By silver sanths
      #include <stdio.h> int main() { float valor_produto = 0, valor_pagamento = 0; int troco = 0; troco = valor_pagamento - valor_produto; scanf("%f", &valor_produto); scanf("%f", &valor_pagamento); if (valor_produto < valor_pagamento) { printf("100: %d", troco / 100); printf("\n50: %d", troco % 100 / 50); printf("\n2: %d", troco % 50 / 20); printf("\n10: %d", troco % 20 / 10); printf("\n5: %d", troco % 10 / 5); printf("\n2: %d", troco % 5 / 2); printf("\n1: %d", troco % 2 / 1); } return 1;
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.