Tema: Select case
Ver Mensaje Individual
  #7 (permalink)  
Antiguo 15/03/2013, 12:30
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Select case

Te lo puse en el post pasado y te lo vuelvo a comentar:

Cita:
Y si no te marca un error, pero los resultados que obtienes no son los esperados, entonces postea algunos datos de ejemplo de tu tabla y dinos qué es lo que esperas obtener como salida.
Pero vayamos por partes: El problema que mencionas NO ESTÁ EN EL CASE-WHEN sino en la condición WHERE que estás colocando. Si el resultado de la consulta es un query empty esto quiere decir que NO HAY INFORMACIÓN QUE CUMPLA CON LA CONDICIÓN WHERE, eso no tiene nada que ver con el CASE WHEN. Observa este caso, supongamos que tenemos estos datos:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM numeros;
  2. +--------+
  3. | numero |
  4. +--------+
  5. |      1 |
  6. |      2 |
  7. |      3 |
  8. |      4 |
  9. +--------+
  10. 4 rows in set (0.00 sec)

Si hacemos un CASE-WHEN para obtener la descripción de cada numero y hacemos un WHERE para buscar el número uno tenemos esto:

Código MySQL:
Ver original
  1. mysql> SELECT numero, CASE numero WHEN 1 THEN 'UNO'
  2.     ->                     WHEN 2 THEN 'DOS'
  3.     ->                     WHEN 4 THEN 'CUATRO'
  4.     ->         END descripcion
  5.     -> FROM numeros
  6.     -> WHERE numero = 1;
  7. +--------+-------------+
  8. | numero | descripcion |
  9. +--------+-------------+
  10. |      1 | UNO         |
  11. +--------+-------------+
  12. 1 row in set (0.00 sec)

Pero observa el caso del número 3, este número EXISTE EN LA TABLA, pero el CASE-WHEN NO CONSIDERA ESTE CASO... el resultado NO ES UN EMPTY QUERY sino un registro con el campo descripción NULL:

Código MySQL:
Ver original
  1. mysql> SELECT numero, CASE numero WHEN 1 THEN 'UNO'
  2.     ->                     WHEN 2 THEN 'DOS'
  3.     ->                     WHEN 4 THEN 'CUATRO'
  4.     ->         END descripcion
  5.     -> FROM numeros
  6.     -> WHERE numero = 3;
  7. +--------+-------------+
  8. | numero | descripcion |
  9. +--------+-------------+
  10. |      3 | NULL        |
  11. +--------+-------------+
  12. 1 row in set (0.00 sec)

Observa, ESTE SI ES UN PROBLEMA CON EL CASE-WHEN ya que no considera todos los casos, pero qué pasa si buscamos el numero 5 en la tabla??? el resultado es un EMPTY QUERY, como el que dices:

Código MySQL:
Ver original
  1. mysql> SELECT numero, CASE numero WHEN 1 THEN 'UNO'
  2.     ->                     WHEN 2 THEN 'DOS'
  3.     ->                     WHEN 3 THEN 'TRES'
  4.     ->                     WHEN 4 THEN 'CUATRO'
  5.     ->                     WHEN 5 THEN 'CINCO'
  6.     ->         END descripcion
  7.     -> FROM numeros
  8.     -> WHERE numero = 5;
  9. Empty set (0.00 sec)

Esto quiere decir que en la tabla NO EXISTE NINGÚN REGISTRO QUE CUMPLA LA CONDICIÓN WHERE, y aquí nada tiene que ver si el CASE-WHEN está correcto...

Perdóname, pero no termino de entender qué es lo que estás tratando de obtener...

Supongo que tu problema se refiere a determinar que ISR (impuesto sobre la renta) se asigna a determinado sueldo o salario, pero depende mucho de cómo tienes almacenada la información. Te pido otra vez, postea la estructura completa de tus tablas, pon algunos datos de ejemplo y dinos qué es lo que esperas obtener como salida.

Saludos
Leo.