Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema con Case

Estas en el tema de Problema con Case en el foro de SQL Server en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 18/08/2011, 16:41
 
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!!
  #2 (permalink)  
Antiguo 01/09/2011, 12:34
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Respuesta: Problema con Case

en este caso es un tanto ver el problema porque depende de los datos que devuelve la base de datos, podrias ayudar subiendo una copia a algun lado y alquien te puede ayudar.

Saludos.

Nos Vemos.
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila

Etiquetas: case, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:21.