Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ricardos1000

Oracle

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;

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Descomplica Consultoria
      Oi Pessoal, preciso de ajuda com um portfolio academico
    • Por 4Unknow
      Bom dia comunidade Imasters.

      Venho aqui tratar de um problema dúvida que estou tendo com um layout que estou tentando usar o formulário php dele.
      Quando clico em enviar ele me enviar para um arquivo .php  (assets/vendor/simple-forms/sendmail.php)

      Ele não envia o e-mail, acredito que deveria aparecer uma mensagem que o contato foi enviado corretamente.
      Vou deixar os arquivos aqui em anexo quem puder me ajudar nessa, ficaria muito grato.
       
      Link Website (wetransfer.com)
    • Por Dcdbbvb
      Faça um código que deverá ter uma matriz de qualquer tamanho(Você define o tamanho) no qual o usuário irá digitar os números que serão armazenados na matriz. Construa uma função que deverá somar todos os números digitados. No final o programa mostrará a matriz e o valor total da somatória.
       
      por favorrrr alguém me ajuda
    • Por lotthaus
      Alguém poderia fazer essa atividade para eu ajudar um amigo ?

    • Por Geralt96
      Bom dia. Alguém pode me dá uma ajuda pra desenvolver essa questão, por gentileza?

      Aqui está ela: https://projecteuler.net/problem=6

      A soma dos quadrados dos primeiros dez números naturais é: 1² + 2² + ... 10² = 385...
      O quadrado da soma dos dez primeiros números naturais é: (1+2+ ... 10)² = 55² = 3025...
      Portanto, a diferença entre a soma dos quadrados dos primeiros dez números naturais e o quadrado da soma é: 3025 - 385 = 2640.
      Encontre a diferença entre a soma dos quadrados dos primeiros cem números naturais e o quadrado da soma.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.