Ver Mensaje Individual
  #5 (permalink)  
Antiguo 28/07/2012, 15:35
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Problema con access

Cita:
Hola, gracias por las respuestas, he cambiado la consulta según me dijiste gnzsoloyo, pero con eso no me resuelve el problema que tengo.
Yo en ningún momento he dicho que la consulta fuera a resolverte ningún problema. Yo estaba hablando de performance, no de resultados de consulta. Son cosas distintas.
A lo que me refería es que como el HAVING se aplica luego de obtener la tabla resultados y no durante el proceso global, no es eficiente plantear un filtrado de datos en él que no sea algo muy preciso, y que no abarque la totalidad de los casos, o bien como solución para casos donde se necesita aplicar una función agregada en las condiciones, cosa que ningún DBMS te permite hacer en el WHERE.
Siempre que necesites realizar un filtrado de datos usando cosas como MAX(), MIN(), AVG, SUM(), etc., se hace en el HAVING, pero tu estabas comparando constantes contra valores de funciones no agregadas, y eso se hace en el WHERE.
¿Se comprende la idea?

Cita:
Cuando pongo un mes en el que no tengo datos la consulta sigue saliendo vacía.
Ese es un error conceptual bastante difundido entre programadores, porque no están habituados a la lógica de las bases de datos.
El problema es que una consulta SQL te devuelve tablas, opera con tablas, almacena datos en tablas, y devuelve los datos que existen en las tablas.
Una consulta a la base de datos no puede realizar operaciones de ningún tipo con datos que no existen en la base.

Primero: Para poder realizar una comparación tal que te devuelva lo que no hay en una tabla, debe ser comparado con lo que haya en otra tabla.
Segundo: Eso significa que para poder hacerlo deberías estar usando un JOIN contra otra tabla que proveyese de los datos raíz a comparar: Los datos de los meses... y no los tienes.

En resumen, tienes dos formas de solucionar las cosas:

1) Usas una tabla que contenga todos y cada uno de los meses del período que vas a verificar, y realizas un LEFT JOIN entre esa tabla y la tabla de ventas.

2) Haces lo que hacen todos los programas: Construyes esos valores visualmente en el formulario, llenando programáticamente los huecos de información con datos para mostrar, que serían aquellos que la base no te puede devolver.

El cómo haces esto último, es tema de programación y OFF-TOPIC de este foro. Deberás resolverlo en el lenguaje que uses para mostrar los datos.

Tip final: Por favor, usa los etiquetados para códigos que te muestra el combo "Highlight", para que tus códigos fuentes sean más legibles.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)