Array
(
)

Comparar campos e retornar um terceiro campo

Edjborges
   - 26 set 2005

Estou fazendo um select unindo duas tabelas, uma delas tem os parametros para comissionamento das vendas e outra as vendas... elas estao ligadas pela tabela produtos... o select é mais ou menos assim:

select Descricao_Cls, MetaMensal_Cld, ComisVend_Cld, Sum(Valor_Ven) as ValorFaturado from classificacaoProduto
left join Produto on Codigo_Cls=Classificacao_prod
left join Vendas on Produto_Ven=Codigo_Prod
left join ClassificacaoProdDetalhes on Codigo_cls=Codigo_Cld
Group by Descricao_Cls, MetaMensal_Cld, ComisVend_Cld

agora eu quero comparar o seguinte, na tabela ClassificacaoProdDetalhes, tem dois campos que é o seguinte, Proporçao da comissão se a meta de vendas for atingida e proporçao se não for atingida.
entao no select eu queria comparar os campos: Se o Sum(Valor_Ven)>=MetaMensal_Cld, entao resulta um campo que é o seguinte:
(Sum(Valor_Ven)*(ComisVend_Cld*Acima_Cld)/100) e se Sum(Valor_Ven)<MetaMensal_Cld entao resulta (Sum(Valor_Ven)*(ComisVend_Cld*Abaixo_Cld)/100)
não sei se expliquei direito, mas estava precisando de ajuda neste select, se alguém puder gastar um tempinho aí fico muito grato.
Um abraço a todos

Rjun
   - 26 set 2005

Você pode usar o CASE.

#Código

SELECT 
  Descricao_Cls, 
  MetaMensal_Cld, ComisVend_Cld, Sum(Valor_Ven) as ValorFaturado,
  CASE 
    WHEN Sum(Valor_Ven) >= MetaMensal_Cld THEN (Sum(Valor_Ven)*(ComisVend_Cld*Acima_Cld)/100)
    WHEN Sum(Valor_Ven) < MetaMensal_Cld THEN (Sum(Valor_Ven)*(ComisVend_Cld*Abaixo_Cld)/100)
  END AS Comissao
FROM 
  ClassificacaoProduto 
LEFT JOIN 
  Produto ON Codigo_Cls = Classificacao_prod 
LEFT JOIN 
  Vendas ON Produto_Ven=Codigo_Prod 
LEFT JOIN 
  ClassificacaoProdDetalhes ON Codigo_cls=Codigo_Cld 
GROUP BY 
  Descricao_Cls, 
  MetaMensal_Cld, 
  ComisVend_Cld 


Edjborges
   - 26 set 2005

Valeu RJun

Resultado perfeito, já havia tentado fazer o Case, mas errei na implementação, pois estava acostumado a usar o Case em campos string
mas ficou perfeito
valeu mesmo

Att.