Case When duplo

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Marcos Viti
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Ter, 04 Set 2018 10:18 am

Olá, estou tentando executar o exercício a baixo, porem não conheço a correta utilização do comando 'Case when', alguém poderia me informar qual a melhor solução para correção do meu código ?

Calcule, utilizando um SELECT, a comissão a pagar na referencia atual, considerando os seguintes dados:
a. O percentual de comissão deve ser calculado sobre os itens da nota, considerando o percentual de comissão definido no cadastro de produtos ou no cadastro de Tipos de Negociação (o maior obtido na comparação);
b. Devem ser calculadas comissões sobre as Vendas e Devoluções de Vendas, sendo que no caso de Devoluções o valor calculado deve ser negativo, para abater no valor total de comissões a pagar.
Arredonde o valor calculado, de forma que sejam consideradas apenas 2 casas decimais. Apresente o nome de cada vendedor e o valor de comissão calculado.

Segue o meu código para anáise:

Selecionar tudo

SELECT 
VEN.APELIDO AS VENDEDOR,
ITE.VLRTOT AS TOTAL_ITEM,
NEG.COMISSAO AS COMISSAO_TIPONEGOC,
PRO.COMVEND AS COMISSAO_PRODUTO,
CAB.NUNOTA AS NUMERO_NOTA,
ITE.CODPROD AS CODIGO_PRODUTO,
  SUM (CASE 
    WHEN ((CAB.TIPMOV = 'V') AND ( NEG.COMISSAO > PRO.COMVEND)) THEN ( ITE.VLRTOT * ( NEG.COMISSAO / 100 ))
    WHEN ((CAB.TIPMOV = 'V') AND ( NEG.COMISSAO < PRO.COMVEND)) THEN ( ITE.VLRTOT * ( PRO.COMVEND / 100 )) AS VENDA ) VLRVENDA,
  CASE
       WHEN ( (CAB.TIPMOV = 'D') AND ( NEG.COMISSAO > PRO.COMVEND ) ) THEN (ITE.VLRTOT * ( -1 ) ) * ( NEG.COMISSAO / 100)
       ELSE (ITE.VLRTOT * ( -1 ) ) * ( PRO.COMVEND / 100 ) 
       END AS DEVOLUCAO
FROM TGFVEN VEN, TGFITE ITE, TGFTPV NEG, TGFPRO PRO, TGFCAB CAB
WHERE CAB.CODVEND = VEN.CODVEND
AND ITE.CODPROD = PRO.CODPROD
AND ITE.NUNOTA = CAB.NUNOTA
AND CAB.STATUSNOTA = 'L'
AND CAB.TIPMOV IN ( 'D', 'V' )
AND CAB.DTNEG > ( SYSDATE -30 )
AND NEG.COMISSAO IS NOT NULL
		ORDER BY NUMERO_NOTA
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Opa,

Pelo que pude observar, teu problemema na verdade é em usar função de grupo SUM() e não agrupar a consulta no GROUP BY com os outros campos que estão no "select" e que não estão dentro da função SUM().
Sempre que usar funções de grupo como SUM() , AVG(), MAX(), COUNT() e etc... é obrigatório usar o GROUP BY.
*O CASE WHEN está aparentemente correto.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes