SQL - Select con Case y nulos

 
Vista:

Select con Case y nulos

Publicado por Lluri (9 intervenciones) el 02/05/2001 17:17:46
Tengo un Select con la función Case. En uno de los casos se evalua si el valor de un campo es Nulo. Me encuentro con el problema de que además de entrar por ese caso también entra por otro de los casos; todo y poner en el resto de casos IS NOT NULL.

Ejemplo:

CASE WHEN LIBROS.LibTit IS NULL THEN SPACE(10)
WHEN LIBROS.LibTit IS NOT NULL AND 10 - LEN(LTRIM(CONVERT(VARCHAR(10),
LIBROS.LibTit)))
> 0 THEN RTRIM(LTRIM(CONVERT(VARCHAR(10),
LIBROS.LibTit)))
+ SPACE(10 - LEN(LTRIM(CONVERT(VARCHAR(10),
LIBROS.LibTit)))) ELSE LEFT(CONVERT(VARCHAR(10),
LIBROS.LibTit), 10) END FROM LIBROS

En este caso entra tanto en el primer Case como en el segundo. ¿Como es posible?

Gracias.
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

RE:Select con Case y nulos

Publicado por Sebastián (73 intervenciones) el 03/05/2001 01:50:43
Hola...
Puede que no haya comprendido muy bien tu problema, si pudieras explicar un poquito más qué es lo que debe arrojar la consulta, o bien que quieres obtener tal vez te pueda ayudar un poco más...

Algo si te comento, cuando usas Casos con varias condiciones, entonces debes poner casos anidados, asi mas o menos:
case when (condicion) then
(Resultado)
else
(case when (condicion) then
(resultado)
else (resultado)
end)
end....

Saludos...
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

RE:Select con Case y nulos

Publicado por Lluri (9 intervenciones) el 03/05/2001 12:32:12
La verdad es que no me expliqué muy bien. Volvamos a intentarlo ;-P

Imaginemos el siguiente Select:

SELECT CASE WHEN LIBROS.LibTit IS NULL THEN SPACE(10)
ELSE (CASE WHEN LIBROS.LibTit = '1' THEN LTRIM(LIBROS.LibTit) ELSE
LTRIM(LIBROS.LibTit) END) END
FROM LIBROS

Este select no tiene mucha lógica pero es un Select que simplifica lo que me está pasando.

Imaginemos un registro de la tabla libros que tiene en el campo LibTit el valor nulo. Según este select debería poner 10 espacios. Pero no es así. Lo que parece hacer es select es:

- Entra en el primer Case y pone 10 espacios.
- Entra en el primer Case anidado dentro del Else. Y no me preguntes porque!!!!!! Al entrar aquí lo que hace es quitarle los espacios que había puesto anteriormente.

Se que entra por el primer case dentro del else porque si en lugar pongo LTRIM(Libros.LibTit) pongo Libros.LibTit; no le quita los espacios.
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

Select con Case y nulos

Publicado por Poli (1 intervención) el 28/01/2024 14:02:11
CASE
WHEN LIBROS.LibTit IS NULL THEN SPACE(10)
WHEN (10 - LEN(LTRIM(CONVERT(VARCHAR(10),LIBROS.LibTit))))>0 THEN RTRIM(LTRIM(CONVERT(VARCHAR(10),LIBROS.LibTit)))+ SPACE(10-LEN(LTRIM(CONVERT(VARCHAR(10),LIBROS.LibTit))))
ELSE LEFT(CONVERT(VARCHAR(10),LIBROS.LibTit),10)
END
FROM LIBROS
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