GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Duvida sobre como transformar uma soma de campos em 0

Tags: #<Tag:0x00007f22da497628>

Prezados,

Estou com uma dificuldade em criar uma condição para uma variável que armazena a soma de vários campos.
Eu gostaria que quando o valor da variável ORCADO_ATUAL fosse > que o PL.LIMITE esse valor virasse zero.
Para melhor entendimento imaginem o seguinte cenário:

  • 1: Na tabela PEX_OE_LIMITE é inserido o limite de um produto que deve ser orçado.
  • 2: Na tabela PEX_OE_TEMP é armazenado o valor dos itens orçados por mês e cliente e a variável ORCADO_ATUAL soma todos esses itens e traz o total para comparar com o limite inserido na tabela PEX_OE_LIMITE.
SELECT
	M.DEESCRICAO AS NOMEMARCA,
	POT.IDPRODUTO,
	I.DESCRICAO AS NOMEPRODUTO,
	PL.LIMITE,
	SUM(
		POT.QTATUMES1  + 
		POT.QTATUMES2  +
		POT.QTATUMES3  +
		POT.QTATUMES4  + 
		POT.QTATUMES5  + 
		POT.QTATUMES6  + 
		POT.QTATUMES7  + 
		POT.QTATUMES8  + 
		POT.QTATUMES9  +
		POT.QTATUMES10 + 
		POT.QTATUMES11 + 
		POT.QTATUMES12
	) AS ORCADO_ATUAL,
	SUM(EF.VALORPRECOVENDA * 
		(
			POT.QTATUMES1  + 
			POT.QTATUMES2  + 
			POT.QTATUMES3  + 
			POT.QTATUMES4  + 
			POT.QTATUMES5  + 
			POT.QTATUMES6  + 
			POT.QTATUMES7  + 
			POT.QTATUMES8  + 
			POT.QTATUMES9  + 
			POT.QTATUMES10 + 
			POT.QTATUMES11 + 
			POT.QTATUMES12
		)
	) AS VALORTOTALORCADO_ATUAL
FROM
	PEX_OE_TEMP POT
	LEFT JOIN PEX_OE_LIMITE PL 
		ON (POT.IDVENDREPRE = PL.IDVENDREPRE 
			AND POT.IDPRODUTO = PL.IDPRODUTO)
	LEFT JOIN MARCA M 
		ON (POT.IDMARCA = M.IDMARCA)
	LEFT JOIN ITEM I 
		ON (POT.IDPRODUTO = I.IDITEM)
	LEFT JOIN CLIFOREMP CFEV 
		ON (POT.IDVENDREPRE = CFEV.IDCLIFOREMP)
	LEFT JOIN ESTOQUE_FILIAL EF 
		ON (POT.IDPRODUTO = EF.IDITEM 
			AND EF.IDFILIAL = 1)
WHERE
	POT.IDVENDREPRE = 0669 /*IDVENDREPRE*/ 
	AND PL.LIMITE <> 0
GROUP BY 
	M.DESCRICAO, POT.IDPRODUTO, I.DESCRICAO, PL.LIMITE 
ORDER BY 
	1,3

Prezados,

Podem estar encerrando o tópico, consegui resolver, segue o código da solução se alguém futuramente tiver a mesma duvida.

Eu inseri o case a seguir entre o select dos campos I.DESCRICAO E PL.LIMITE.

CASE WHEN SUM(POT.QTATUMES1+
POT.QTATUMES2+
POT.QTATUMES3+
POT.QTATUMES4+
POT.QTATUMES5+
POT.QTATUMES6+
POT.QTATUMES7+
POT.QTATUMES8+
POT.QTATUMES9+
POT.QTATUMES10+
POT.QTATUMES11+
POT.QTATUMES12) > PL.LIMITE THEN 0 ELSE
SUM(POT.QTATUMES1+
POT.QTATUMES2+
POT.QTATUMES3+
POT.QTATUMES4+
POT.QTATUMES5+
POT.QTATUMES6+
POT.QTATUMES7+
POT.QTATUMES8+
POT.QTATUMES9+
POT.QTATUMES10+
POT.QTATUMES11+
POT.QTATUMES12) END
AS ORCADO_ATUAL
1 Curtida
//