Tema: Select case
Ver Mensaje Individual
  #12 (permalink)  
Antiguo 20/03/2013, 15:52
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

Hola de nuevo Bhrentox:

Insisto en que te estás complicando de más la consulta... si lo que necesitas es obtener los de la tabla de un valor isr para un valor determinado ni siquiera hay necesidad de hacer un CASE-WHEN... sería así.

Supongamos que tu tabla isr la tienes así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM isr;
  2. +------+----------------+----------------+-----------+-----------+
  3. | id   | limiteinferior | limitesuperior | cuotafija | porciento |
  4. +------+----------------+----------------+-----------+-----------+
  5. |    1 | 0.01           | 244.80         | 0.00      | 0.02      |
  6. |    2 | 244.81         | 2077.50        | 4.65      | 0.06      |
  7. |    3 | 2077.51        | 3651.00        | 121.95    | 0.11      |
  8. |    4 | 3651.01        | 4244.10        | 293.25    | 0.16      |
  9. |    5 | 4244.11        | 5081.40        | 388.05    | 0.18      |
  10. |    6 | 5081.41        | 10248.45       | 538.20    | 0.21      |
  11. |    7 | 10248.46       | 16153.05       | 1641.75   | 0.24      |
  12. |    8 | 16153.06       | NULL           | 3030.60   | 0.30      |
  13. +------+----------------+----------------+-----------+-----------+
  14. 8 rows in set (0.00 sec)

Puedes hacer directamente la consulta poniendo el valor, sin el case, sólo con una condición WHERE:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM isr
  2.     -> WHERE (20000 BETWEEN limiteinferior AND limitesuperior) OR
  3.     ->       (20000 >= limiteinferior AND limitesuperior IS NULL);
  4. +------+----------------+----------------+-----------+-----------+
  5. | id   | limiteinferior | limitesuperior | cuotafija | porciento |
  6. +------+----------------+----------------+-----------+-----------+
  7. |    8 | 16153.06       | NULL           | 3030.60   | 0.30      |
  8. +------+----------------+----------------+-----------+-----------+
  9. 1 row in set (0.00 sec)


O podrías utilizar una variable, es exactamente lo mismo. estos casos coinciden con límites inferior y superir

Si quieres obtener los valores de la tabla para 5081.40, lo único que tienes que hacer es algo como esto:

Código MySQL:
Ver original
  1. mysql> SET @valor = 5081.40;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> SELECT * FROM isr
  5.     -> WHERE (@valor BETWEEN limiteinferior AND limitesuperior) OR
  6.     ->       (@valor >= limiteinferior AND limitesuperior IS NULL);
  7. +------+----------------+----------------+-----------+-----------+
  8. | id   | limiteinferior | limitesuperior | cuotafija | porciento |
  9. +------+----------------+----------------+-----------+-----------+
  10. |    5 | 4244.11        | 5081.40        | 388.05    | 0.18      |
  11. +------+----------------+----------------+-----------+-----------+
  12. 1 row in set (0.00 sec)
  13.  
  14. mysql> SET @valor = 5081.41;
  15. Query OK, 0 rows affected (0.00 sec)
  16.  
  17. mysql> SELECT * FROM isr
  18.     -> WHERE (@valor BETWEEN limiteinferior AND limitesuperior) OR
  19.     ->       (@valor >= limiteinferior AND limitesuperior IS NULL);
  20. +------+----------------+----------------+-----------+-----------+
  21. | id   | limiteinferior | limitesuperior | cuotafija | porciento |
  22. +------+----------------+----------------+-----------+-----------+
  23. |    6 | 5081.41        | 10248.45       | 538.20    | 0.21      |
  24. +------+----------------+----------------+-----------+-----------+
  25. 1 row in set (0.00 sec)

Dale un vistazo para ver si te sirve...

Saludos
Leo.