Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/08/2011, 16:41
mupatt25
 
Fecha de Ingreso: agosto-2011
Mensajes: 1
Antigüedad: 12 años, 8 meses
Puntos: 0
Problema con Case

Hola buena tarde:

Tengo un problema con un case ya que solo está entrando al primero y el resto los omite. Los datos son los siguientes:

El siguiente query es correcto pero no me trae todas las tarifas solo la información de las tarifas 1 y 5

select D.SubDirector, D.[Division_id],D.Division_Dsc, A1.int_art [sku],
Case When Max(A1.precio_oferta_1) = 0 or Max(A1.precio_oferta_1) is null then Max(A1.precio_oferta_5) else Max(A1.precio_oferta_1) End [Precio Oferta],
Case When Max(A1.precio_tarifa1) = 0 or Max(A1.precio_tarifa1) is null then Max(A1.precio_tarifa5 ) else Max(A1.precio_tarifa1) End [Precio Tarifa],
Case When Max(A1.precio_tarifa1) = 0 or Max(A1.precio_tarifa1) is null then ((Max(A1.precio_tarifa5)*100)/111) else ((Max(A1.precio_tarifa1)*100)/116) End [Precio Tarifa Sin IVA]
from DimArticulo A1 INNER JOIN DimDivision D on A1.cod_fam2 = D.Division_Id
Where (Convert(int,A1.cod_fam2) = 190 or Convert(int,A1.cod_fam2) between 1 and 96 and D.Categoria_Id != 0045 and D.Categoria_Id != 0050)
Group by D.SubDirector, D.[Division_id],D.Division_Dsc, A1.int_art
Having (Max(A1.precio_tarifa1) + Max(A1.precio_tarifa5))>0

Lo que quiero es que me traiga la información de todas las tarifas, ya que algunas veces la tarifa1 es cero o la tarifa5 es cero o la tarifa2 es cero.
Traté de hacerlo de la siguiente forma para cubrir todos los casos pero solo realiza el primer case :(

Select D.SubDirector,D.[Division_id],D.Division_Dsc, A1.int_art [sku],
Case When (Max(A1.precio_tarifa1) <> 0 or Max(A1.precio_tarifa1) is not null) then Max(A1.precio_tarifa1)
When (Max(A1.precio_tarifa1) = 0 or Max(A1.precio_tarifa1) is null) or
(Max(A1.precio_tarifa2) <> 0 or Max(A1.precio_tarifa2) is not null) then Max(A1.precio_tarifa2)
When (Max(A1.precio_tarifa1) = 0 or Max(A1.precio_tarifa1) is null) AND
(Max(A1.precio_tarifa2) = 0 or Max(A1.precio_tarifa2) is null) AND
(Max(A1.precio_tarifa3) <> 0 or Max(A1.precio_tarifa3) is not null) then Max(A1.precio_tarifa3)
When (Max(A1.precio_tarifa1) = 0 or Max(A1.precio_tarifa1) is null) AND
(Max(A1.precio_tarifa2) = 0 or Max(A1.precio_tarifa2) is null) AND
(Max(A1.precio_tarifa3) = 0 or Max(A1.precio_tarifa3) is null) AND
(Max(A1.precio_tarifa4) <> 0 or Max(A1.precio_tarifa4) is not null) then Max(A1.precio_tarifa4)
When (Max(A1.precio_tarifa1) = 0 or Max(A1.precio_tarifa1) is null) AND
(Max(A1.precio_tarifa2) = 0 or Max(A1.precio_tarifa2) is null) AND
(Max(A1.precio_tarifa3) = 0 or Max(A1.precio_tarifa3) is null) AND
(Max(A1.precio_tarifa4) = 0 or Max(A1.precio_tarifa4) is null) AND
(Max(A1.precio_tarifa5) <> 0 or Max(A1.precio_tarifa5) is not null) then Max(A1.precio_tarifa5)
End As [Precio Tarifa]

From DimArticulo A1 INNER JOIN DimDivision D on A1.cod_fam2 = D.Division_Id
Where Division_Id = 0008
Group by D.SubDirector, D.[Division_id],D.Division_Dsc, A1.int_art
Having (Max(A1.precio_tarifa1) + Max(A1.precio_tarifa5) + MAX(A1.precio_tarifa2) + MAX(A1.precio_tarifa4))>0

Las tarifas en la tabla son diferentes columnas. No veo que es lo que estoy haciendo mal, alguién podría orientarme.
Gracias!!