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

[SOLUCIONADO] Traer registros que no tengan valores

Estas en el tema de Traer registros que no tengan valores en el foro de Mysql en Foros del Web. buenas tardes este es mi problema: es un mercado virtual de una empresa, que le vende a empresas, necesito hacer un reporte que dadas dos ...
  #1 (permalink)  
Antiguo 12/09/2013, 15:51
 
Fecha de Ingreso: mayo-2011
Mensajes: 7
Antigüedad: 13 años
Puntos: 0
Pregunta Traer registros que no tengan valores

buenas tardes este es mi problema: es un mercado virtual de una empresa, que le vende a empresas, necesito hacer un reporte que dadas dos fechas me muestre el monto $ total de ventas entre esas dos fechas, para poder vender los productos se abre durante un tiempo determinado la posibidad para que puedan comprar desde cierta empresa, ahora las tablas
tengo 5 tablas involucradas
----empresas : tiene los datos de la empresa
----pedidos: que son las compras que se hacen desde las otras empresas
----detalle_pedido: que almacena producto por producto comprado, relacionado con la tablade pedidos
----precio: almacena el precio de cada producto ( para que cuando los precios varien los reportes anteriores a la fecha del cambio no se alteren)
----mercado_activo: que es donde se almacenan que empresas y desde que fecha pueden comprar.

bueno necesito una consulta que dada dos fechas me muestre el monto vendido a cada empresa durante ese periodo de tiempo y si no vendio me muestre null o 0 es indistinto, esta es la consulta que hice :
Código MySQL:
Ver original
  1. SELECT  empresas.empresa, sum(precios.precio*cantidad) as monto, count( distinct mercado_activo.id_mercado)as cant_mercado
  2. FROM empresas
  3. left JOIN  pedidos  ON empresas.id_empresa=pedidos.id_empresa
  4. left  JOIN detalle_pedido ON  pedidos.id_pedido=detalle_pedido.id_pedido
  5. left JOIN precios on detalle_pedido.id_precio=precios.id_precio
  6. left JOIN mercado_activo ON pedidos.id_mercado=mercado_activo.id_mercado
  7. where mercado_activo.fecha_inicio>='2013-09-01'
  8. AND mercado_activo.fecha_fin<='2013-09-12'  
  9. GROUP BY empresas.empresa

el problema esta en que no logro mostrar las empresas que no hicieron compras en ese rango, solo me muestra el resultado de la que si hizo..
empresa-----monto-----cant_mercado
xxxxxxxx----115.56----- 2

les agradezco en lo que me puedan ayudar ... saludos

Última edición por gnzsoloyo; 12/09/2013 a las 21:07
  #2 (permalink)  
Antiguo 12/09/2013, 21:13
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, 5 meses
Puntos: 2658
Respuesta: Traer registros que no tengan valores

Cita:
el problema esta en que no logro mostrar las empresas que no hicieron compras en ese rango
Es un problema de lógica: Para que el rango sea aplicable, deben forzosamente existir compras en el período, o de lo contrario los valores serían NULL.
En principio, planteado así, la cosa es mas o menos simple:
Código MySQL:
Ver original
  1.     E.empresa,
  2.     SUM(P.precio * cantidad) monto,
  3.     COUNT(distinct MA.id_mercado) cant_mercado
  4. FROM empresas E
  5.     left JOIN  pedidos P ON E.id_empresa = P.id_empresa
  6.     left  JOIN detalle_pedido DP ON  P.id_pedido = DP.id_pedido
  7.     left JOIN precios on PR DP.id_precio = P.id_precio
  8.     left JOIN mercado_activo MA ON P.id_mercado = MA.id_mercado
  9.     MA.fecha_inicio BETWEEN '2013-09-01'  AND  '2013-09-12'  
  10.     OR MA.fecha_inicio  IS NULL
  11. GROUP BY E.empresa
__________________
¿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 13/09/2013, 01:24
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Traer registros que no tengan valores

Para hacer eso, lo que tienes que empezar a pensar es que tu query no consiste en buscar registros por cada empresa.Tienes que buscar registros por cada mes (o según el tipo de rango que quieras).Hay varias formas de hacerlo.La más simple, tener una tabla de esos rangos de tiempo.O sea, una tabla con fechas del tipo
Enero 2013
Febrero 2013
Marzo 2013...
A esta tabla le haces el left Join con las facturas.
  #4 (permalink)  
Antiguo 13/09/2013, 09:57
 
Fecha de Ingreso: mayo-2011
Mensajes: 7
Antigüedad: 13 años
Puntos: 0
Respuesta: Traer registros que no tengan valores

gnzsoloyo muchas gracias tu solución me funciono a medias, porque nada mas trabajaste la fecha de inicio pero igual me fue util para encontrar la solucion que era sencillamente agregar lo que tu pusiste del null y por alguna razon extraña poner la fecha_fin depues de la fecha _ inicio Gracias

Etiquetas: mysql+consulta
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 03:21.