Doubt with for command in sql server 2008

0

I have the following situation, 5 discount fields that receive the discount name 01 through 05. this sql query works down (1), makes the correct calculation more only when you have only 1 of the rebates filled, if I have more than 1 then the result will not be correct. For the result to be correct if I have more than 1 discount, I need to find the individual value of each discount on the price value is there after this I would have an overall discount on the value, I could add up all the discounts, I would have to make a for is to calculate each one separate.

How could I do this? Thanks!

DECLARE @VALOR_ENCONTRADO1 real
DECLARE @VALOR_ENCONTRADO2 real
DECLARE @VALOR_ENCONTRADO3 real
DECLARE @VALOR_ENCONTRADO4 real
DECLARE @VALOR_ENCONTRADO5 real

@VALOR_ENCONTRADO1 =(DESCONTO01  / 100) * PRECO  
@VALOR_ENCONTRADO2 =(DESCONTO02  / 100) * PRECO  
@VALOR_ENCONTRADO3 =(DESCONTO03  / 100) * PRECO  
@VALOR_ENCONTRADO4 =(DESCONTO04  / 100) * PRECO  
@VALOR_ENCONTRADO5 =(DESCONTO05  / 100) * PRECO  

(1)
select 
case (ADICIONAL_ESTADO)  
  when 'S' then   (SUM(DESCONTO01 + DESCONTO02 + DESCONTO03 + DESCONTO04 + 0 ) / 100) * PRECO    
  when 'N' then   (SUM(DESCONTO01 + DESCONTO02 + DESCONTO03 + DESCONTO04+DESCONTO05) / 100)  * PRECO
END AS  VALOR_LIQUIDO, 

case (ADICIONAL_ESTADO)  
  when 'S' then  (SUM(DESCONTO01 + DESCONTO02 + DESCONTO03 + DESCONTO04 + 0 ) / 100 ) * PROMOCAO 
  when 'N' then  (SUM(DESCONTO01 + DESCONTO02 + DESCONTO03 + DESCONTO04+DESCONTO05) / 100 ) * PROMOCAO
END AS VALOR_PROMOCAO, 
IDPRODUTO,CODIGO,PRECO,DESCONTO01,DESCONTO02,DESCONTO03,DESCONTO04,DESCONTO05
from TB_PRODUTO
WHERE CODIGO = '016055IR'
GROUP BY ADICIONAL_ESTADO, IDPRODUTO,CODIGO, PRECO,PROMOCAO,DESCONTO01,DESCONTO02,DESCONTO03,DESCONTO04,DESCONTO05

Sqlafterpostingtheanswer:

select (DESCONTO01 / 100 ) * PRECO AS DESCONTO_PRECO_01, (DESCONTO02 / 100 ) * PRECO AS DESCONTO_PRECO_02, (DESCONTO03 / 100 ) * PRECO AS DESCONTO_PRECO_03, (DESCONTO04 / 100 ) * PRECO AS DESCONTO_PRECO_04, case (ADICIONAL_ESTADO ) when 'S' then (0 / 100 ) * PRECO --0 é o valor do desconto para o estado caso tenha vai receber um valor END AS DESCONTO_PRECO_05, (DESCONTO01 / 100 ) * PRECO AS DESCONTO_PRECO_01, (DESCONTO02 / 100 ) * PRECO AS DESCONTO_PRECO_02, (DESCONTO03 / 100 ) * PRECO AS DESCONTO_PRECO_03, (DESCONTO04 / 100 ) * PRECO AS DESCONTO_PRECO_04, case (ADICIONAL_ESTADO ) when 'N' then (DESCONTO05 / 100 ) * PRECO -- se não tem desconto para o estado vai receber o campo de desconto05 END AS DESCONTO_PRECO_05, IDPRODUTO,CODIGO,PRECO,DESCONTO01,DESCONTO02,DESCONTO03,DESCONTO04,DESCONTO05 from TB_PRODUTO WHERE CODIGO = '016055IR' GROUP BY ADICIONAL_ESTADO, IDPRODUTO,CODIGO, PRECO,PROMOCAO,DESCONTO01,DESCONTO02,DESCONTO03,DESCONTO04,DESCONTO05

Image Response:

    
asked by anonymous 22.02.2016 / 17:40

1 answer

0

I found the question a bit confusing (rs), and it would be nice to see the structure of the tables, but I hope I can help. To find the individual value of each discount, you could do this:

select 
(DESCONTO01 / 100 ) * PRECO AS DESCONTO_PRECO_01,
(DESCONTO02 / 100 ) * PRECO AS DESCONTO_PRECO_02,
(DESCONTO03 / 100 ) * PRECO AS DESCONTO_PRECO_03,
(DESCONTO04 / 100 ) * PRECO AS DESCONTO_PRECO_04,
case (ADICIONAL_ESTADO)     
  when 'N' then   (DESCONTO05 / 100)  * PRECO ,
END AS DESCONTO_PRECO_05, 

(DESCONTO01 / 100 ) * PROMOCAO AS DESCONTO_PROMOCAO_01,
(DESCONTO02 / 100 ) * PROMOCAO AS DESCONTO_PROMOCAO_02,
(DESCONTO03 / 100 ) * PROMOCAO AS DESCONTO_PROMOCAO_03,
(DESCONTO04 / 100 ) * PROMOCAO AS DESCONTO_PROMOCAO_04,
case (ADICIONAL_ESTADO)  
   when 'N' then  (DESCONTO05 / 100 ) * PROMOCAO
END AS DESCONTO_PROMOCAO_05, 

IDPRODUTO, CODIGO, PRECO, DESCONTO01, DESCONTO02, DESCONTO03, DESCONTO04, DESCONTO05
from TB_PRODUTO
  WHERE CODIGO = '016055IR'
GROUP BY ADICIONAL_ESTADO, IDPRODUTO, CODIGO, PRECO, PROMOCAO, DESCONTO01, DESCONTO02, DESCONTO03, DESCONTO04, DESCONTO05

In this query you are only displaying the discount values, but from there, just do the desired operations to find your "global discount".

    
22.02.2016 / 18:40