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

consulta when con impuestos o sin impuestos

Estas en el tema de consulta when con impuestos o sin impuestos en el foro de Mysql en Foros del Web. Buenas tengo esta consulta when, se ejecuta perfectamente @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT CASE WHEN pvp0 >= 0 AND pvp0 <= 10 THEN ...
  #1 (permalink)  
Antiguo 06/04/2013, 07:07
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
consulta when con impuestos o sin impuestos

Buenas tengo esta consulta when, se ejecuta perfectamente

Código MySQL:
Ver original
  1. WHEN pvp0 >=0 AND pvp0 <= 10 THEN '1 - 10'
  2. WHEN pvp0 >10 AND pvp0 <= 20 THEN '11 - 20'
  3. WHEN pvp0 >20 AND pvp0 <= 30 THEN '21 - 30'
  4. WHEN pvp0 >30 AND pvp0 <= 40 THEN '31 - 40'
  5. WHEN pvp0 >40 AND pvp0 <= 50 THEN '41 - 50'
  6. WHEN pvp0 >50 AND pvp0 <= 60 THEN '51 - 60'
  7. WHEN pvp0 >60 AND pvp0 <= 70 THEN '61 - 70'
  8. WHEN pvp0 >70 AND pvp0 <= 80 THEN '71 - 80'
  9. WHEN pvp0 >80 AND pvp0 <= 90 THEN '81 - 90'
  10. WHEN pvp0 >90 AND pvp0 <= 100 THEN '91 - 100'
  11. WHEN pvp0 >100 AND pvp0 <= 200 THEN '101 - 200'
  12. WHEN pvp0 >200 AND pvp0 <= 300 THEN '201 - 300'
  13. WHEN pvp0 >300 AND pvp0 <= 400 THEN '301 - 400'
  14. WHEN pvp0 >400 AND pvp0 <= 500 THEN '401 - 500'
  15. WHEN pvp0 >500 AND pvp0 <= 600 THEN '501 - 600'
  16. WHEN pvp0 >600 AND pvp0 <= 700 THEN '601 - 700'
  17. WHEN pvp0 >700 AND pvp0 <= 800 THEN '701 - 800'
  18. WHEN pvp0 >800 AND pvp0 <= 900 THEN '801 - 900'
  19. WHEN pvp0 >900 AND pvp0 <= 1000 THEN '901 - 1000'
  20. WHEN pvp0 >1000 AND pvp0 <= 1300 THEN '1201 - 1300'
  21. WHEN pvp0 >1300 AND pvp0 <= 1600 THEN '1501 - 1600'
  22. WHEN pvp0 >1600 AND pvp0 <= 2000 THEN '1801 - 2000'
  23. WHEN pvp0 >2000 AND pvp0 <= 2600 THEN '2301 - 2600'
  24. WHEN pvp0 >2600 AND pvp0 <= 3000 THEN '2601 - 3000'
  25. WHEN pvp0 >3000 AND pvp0 <= 3600 THEN '3301 - 3600'
  26. WHEN pvp0 >3600 AND pvp0 <= 4000 THEN '3601 - 4000'
  27. WHEN pvp0 >4000 AND pvp0 <= 4300 THEN '4001 - 4300'
  28. WHEN pvp0 >4300 AND pvp0 <= 4600 THEN '4301 - 4600'
  29. WHEN pvp0 >4600 AND pvp0 <= 5000 THEN '4601 - 5000'
  30. WHEN pvp0 >5000 AND pvp0 <= 5300 THEN '5001 - 5300'
  31. WHEN pvp0 >5300 AND pvp0 <= 5600 THEN '5301 - 5600'
  32. WHEN pvp0 >5600 AND pvp0 <= 6000 THEN '5601 - 6000'
  33. WHEN pvp0 >6000 AND pvp0 <= 6300 THEN '6001 - 6300'
  34. WHEN pvp0 >6300 AND pvp0 <= 6600 THEN '6301 - 6600'
  35. WHEN pvp0 >6600 AND pvp0 <= 7000 THEN '6601 - 7000'
  36. WHEN pvp0 >7000 AND pvp0 <= 7300 THEN '7001 - 7300'
  37. WHEN pvp0 >7300 AND pvp0 <= 7600 THEN '7301 - 7600'
  38. WHEN pvp0 >7600 AND pvp0 <= 8000 THEN '7601 - 8000'
  39. WHEN pvp0 >8000 AND pvp0 <= 8300 THEN '8001 - 8300'
  40. WHEN pvp0 >8300 AND pvp0 <= 8600 THEN '8301 - 8600'
  41. WHEN pvp0 >8600 AND pvp0 <= 9000 THEN '8601 - 9000'
  42. WHEN pvp0 >9000 AND pvp0 <= 9300 THEN '9001 - 9300'
  43. WHEN pvp0 >9300 AND pvp0 <= 9600 THEN '9301 - 9600'
  44. WHEN pvp0 >9600 AND pvp0 <= 10000 THEN '9601 - 10000'
  45. ELSE '10000 - 100000'
  46. END as valor  from tabla_productos p join tipo_iva ti on ti.id = p.iva join fabricantes fb on fb.id = p.fabricante where p.id_familia =1 group by valor order by pvp0 asc

Como habreis observado hay un join, y os preguntareis que hace ese join ahi??, pues bien, mi idea es que esta consulta muestre los rangos con impuestos o sin impuestos.

Actualmente el campo pvp0 esta en la base de datos en la tabla productos y es la base imponible.

esta tabla cuenta con un campo iva que especifica el id del impuesto que esta grabado en la tabla iva "id 1=18%,id 2=21%,id 3=10%..."

cuando quiero mostrar el precio de un producto con iva utilizo
Código MySQL:
Ver original
  1. ROUND(pvp0* ((porcentaje_iva / 100) + 1),2)

pero no logro que el when muestre los precios con impuestos o sin impuestos

he probado a
Código MySQL:
Ver original
  1. WHEN ROUND(pvp0* ((porcentaje_iva / 100) + 1),2)>4300 AND ROUND(pvp0* ((porcentaje_iva / 100) + 1),2)<= 4600 THEN '4301 - 4600'

pero nada, no hay medio, me asesorais??

Gracias
  #2 (permalink)  
Antiguo 06/04/2013, 07:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consulta when con impuestos o sin impuestos

LA verdad, a mi entender y experiencia estás complicando las cosas innecesariamente, cuando podrías resolviendo el tema con una tabla de rangos impositivos...
Por otro lado, estás hardcodenando algo que puede requerir luego ajustes de algún tipo, lo que resulta nocivo, y encima, estás usando esa famosa (y muy usada por los programadores) cláusula CASE en el SELECT, que es una pésima solución para la performance.
Me parece que deberías afinar tu modelo de datos y obtendrías mejores resultados, con consultas más simples...
ASí como lo planteas, no me parece una solución optima.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/04/2013, 10:12
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: consulta when con impuestos o sin impuestos

hola, la verdad es que yo tambien lo veo algo engorroso, como seria la forma de la tabla con rangos impositivos que me comentas.

Gracias
  #4 (permalink)  
Antiguo 09/04/2013, 06:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta when con impuestos o sin impuestos

rangosImpositivos
id
vmin
vmax
rango

id__vmin__vmax__rango
_1____0____10__1 - 10
....

esta seria la tabla se trata de programar de tal manera que cambiando datos de la tabla se adapte la aplicación sin necesidad de tocar codigo.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: campo, impuestos, join, 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 07:41.