SQL Server - case when

   
Vista:

case when

Publicado por SEBASTIAN (9 intervenciones) el 15/09/2011 15:21:19
holaa:

espero alguien me pueda ayudar con un problema k tengo....

tengo una vista en sql server 2005 y quiero mostrar un campo que dependiendo del valor me muestre el correcto....son 3 campos
esto es como lo estoy haciendo...
(CASE WHEN COSTO1 = 0 THEN COSTO2 WHEN COSTO2=0 THEN COSTO3 END) AS COSTO_VENTA,

el problema es k me toma solo el campo 1 y 2 porfaaa ayuudaaaaaa
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

case when

Publicado por Leopoldo Taylhardat (7 intervenciones) el 15/09/2011 23:52:21
PUEDES USAR "IF"

if costo1 <> 0 then costo1 else if costo2<> 0 then costo2 else costo3 endif endif AS COSTO_VENTA,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

case when

Publicado por Isaias (3180 intervenciones) el 19/09/2011 23:07:59
Si ya no vas a comparar el campo3, entonces debes hacer un ELSE Costo3 END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

case when

Publicado por Sebastian (9 intervenciones) el 20/09/2011 22:02:58
Muchas Gracias por responder : probe lo señalado pero me sigue dando errores

Mens 156, Nivel 15, Estado 1, Procedimiento V_Factura_EXP_F, Línea 23
Sintaxis incorrecta cerca de la palabra clave 'IF'.
Mens 156, Nivel 15, Estado 1, Procedimiento V_Factura_EXP_F, Línea 23
Sintaxis incorrecta cerca de la palabra clave 'THEN'.
Mens 156, Nivel 15, Estado 1, Procedimiento V_Factura_EXP_F, Línea 23
Sintaxis incorrecta cerca de la palabra clave 'THEN'.

lo hize de esta manera

A.MKTUS, --CAMPO ANTERIOR
(IF B.COSTO1 = 0 THEN B.COSTO2 ELSE IF B.COSTO2 = 0 THEN B.COSTO3 END END) AS COSTO_VENTA,

COSTO1 2 y 3 SON CAMPOS DE OTRA VISTA LES COPIO TODA LA CONSULTA MEJOR

ALTER VIEW [dbo].[V_Factura_EXP_F]
AS
SELECT A.ANOFAC,
A.MESFAC,
A.CIAFAC,
A.CLTFAC,
A.NUMFAC,
A.DOCREF,
A.GRPFAC,
A.SGRFAC,
A.PRDFAC,
A.MNDFAC,
A.VALVOP,
A.CANFAC,
A.PUMFAC,
A.CAJASEQ,
A.VALMON,
A.VALUS,
A.COMMON,
A.COMUS,
A.MKTMON,
A.MKTUS,
(IF B.COSTO1 = 0 THEN B.COSTO2 ELSE IF B.COSTO2 = 0 THEN B.COSTO3 END END) AS COSTO_VENTA,
--B.COSTO3 AS COSTO_VENTA,
A.TIPO,
A.DOCUMENTO


FROM dbo.T_Factura_EXP_MA AS A
LEFT OUTER JOIN dbo.V_Factura_EXP_CostoVenta AS B
ON
A.ANOFAC = B.ANOFAC AND
A.MESFAC = B.MESFAC AND
A.CIAFAC = B.CIAFAC AND
A.CLTFAC = B.CLTFAC AND
A.GRPFAC = B.GRPFAC AND
A.SGRFAC = B.SGRFAC AND
A.PRDFAC = B.PRDFAC AND
A.NUMFAC = B.NUMFAC AND
A.DOCREF = B.DOCREF AND
A.MNDFAC = B.MNDFAC AND
A.VALVOP = B.VALVOP AND
A.CANFAC = B.CANFAC AND
A.PUMFAC = B.PUMFAC AND
A.CAJASEQ = B.CAJASEQ AND
A.VALMON = B.VALMON AND
A.VALUS = B.VALUS AND
A.COMMON = B.COMMON AND
A.COMUS = B.COMUS AND
A.MKTMON = B.MKTMON AND
A.MKTUS = B.MKTUS
GROUP BY A.ANOFAC,
A.MESFAC,
A.CIAFAC,
A.CLTFAC,
A.NUMFAC,
A.DOCREF,
A.GRPFAC,
A.SGRFAC,
A.PRDFAC,
A.MNDFAC,
A.VALVOP,
A.CANFAC,
A.PUMFAC,
A.CAJASEQ,
A.VALMON,
A.VALUS,
A.COMMON,
A.COMUS,
A.MKTMON,
A.MKTUS,
B.COSTO3,
A.TIPO,
A.DOCUMENTO

MUCHAS GRACIAS POR TOMARCE EL TIEMPO PARA RESPONDER MI CONSULTA....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

case when

Publicado por Isaias (3180 intervenciones) el 20/09/2011 23:50:00
Debe ser asi:

CASE WHEN B.COSTO1 = 0 THEN B.COSTO2
WHEN B.COSTO2 = 0 THEN B.COSTO3 END

Como ves, no preguntamos por el B.COSTO3, si aun deseas preguntar por el, entonces debes meter un WHEN B.COSTO3 = 0 THEN.......
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

case when

Publicado por leonardo_josue (79 intervenciones) el 21/09/2011 21:57:35
Hola Compañeros:

Hay un pequeño detalle que habría que considerar y es la posibilidad que tanto el costo1 como costo2 fueran = 0... aquí Sebastian no nos dice qué debería suceder aunque supongo que debería tomar el valor de costo3... Creo que es necesario anidar un case.when:

1
2
3
4
5
6
7
8
9
10
11
12
13
declare @tabla table (costo1 int, costo2 int, costo3 int)
insert into @tabla values (1,2,3)
insert into @tabla values (0,4,5)
insert into @tabla values (0,0,9)
insert into @tabla values (0,0,0)
 
select * from @tabla
select
CASE
WHEN B.COSTO1 != 0 THEN B.COSTO1
WHEN B.COSTO1 = 0 THEN (CASE WHEN B.COSTO2 = 0 THEN COSTO3 ELSE COSTO2 END)
END
from @Tabla B


Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

case when

Publicado por sebastian (9 intervenciones) el 23/09/2011 16:25:30
Muchas Gracias a todos por sus aportes y compartir sus conocimientos Leonardo tu respuesta se acomodo de forma excelente a lo k necesitaba de verdad muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar