Ver Mensaje Individual
  #5 (permalink)  
Antiguo 04/04/2014, 16:33
Avatar de JuJoGuAl
JuJoGuAl
 
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Saber las cantidades vendidas de un producto

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por lo pronto, trata de simplificar las cosas, y usar alias. Ayuda a poder leer la query sin tantas complicaciones:

Código SQL:
Ver original
  1. SELECT VD.producto_nombre
  2. FROM ventas VE
  3.     INNER JOIN ventas_detalles VD ON VE.correlativo = VD.correlativo_principal
  4.     INNER JOIN productos_compuestos PC ON VD.producto_codigo = PC.codigo_producto
  5.     INNER JOIN productos_compuestos_partes PCP ON PC.codigo_producto = PCP.parte_producto_codigo
  6.     INNER JOIN productos_terminados PT ON PCP.parte_producto_codigo = PT.codigo_producto
  7. WHERE
  8.     (PT.nombre LIKE '%ADR%')
  9.     AND (VE.fecha_emision BETWEEN '2014.03.17' AND '2014.03.24')
  10.     AND (VE.temporal = 'F')
Luego, considerando que una query sólo devuelve NULL si no se cumplen todas las condiciones al mismo tiempo, yo te sugeriría que analices los resultaods parte por parte, a ver qué condición no se cumple.
Primero los JOIN:
Código SQL:
Ver original
  1. SELECT VD.producto_nombre
  2. FROM ventas VE
  3.     INNER JOIN ventas_detalles VD ON VE.correlativo = VD.correlativo_principal
  4.     INNER JOIN productos_compuestos PC ON VD.producto_codigo = PC.codigo_producto
  5.     INNER JOIN productos_compuestos_partes PCP ON PC.codigo_producto = PCP.parte_producto_codigo
  6.     INNER JOIN productos_terminados PT ON PCP.parte_producto_codigo = PT.codigo_producto

Después las ventas:
Código SQL:
Ver original
  1. SELECT VD.producto_nombre
  2. FROM ventas VE
  3.     INNER JOIN ventas_detalles VD ON VE.correlativo = VD.correlativo_principal
  4.     INNER JOIN productos_compuestos PC ON VD.producto_codigo = PC.codigo_producto
  5.     INNER JOIN productos_compuestos_partes PCP ON PC.codigo_producto = PCP.parte_producto_codigo
  6.     INNER JOIN productos_terminados PT ON PCP.parte_producto_codigo = PT.codigo_producto
  7. WHERE
  8.     (VE.temporal = 'F')

Despues las fechas:
Código SQL:
Ver original
  1. SELECT VD.producto_nombre
  2. FROM ventas VE
  3.     INNER JOIN ventas_detalles VD ON VE.correlativo = VD.correlativo_principal
  4.     INNER JOIN productos_compuestos PC ON VD.producto_codigo = PC.codigo_producto
  5.     INNER JOIN productos_compuestos_partes PCP ON PC.codigo_producto = PCP.parte_producto_codigo
  6.     INNER JOIN productos_terminados PT ON PCP.parte_producto_codigo = PT.codigo_producto
  7. WHERE
  8.     (VE.fecha_emision BETWEEN '2014.03.17' AND '2014.03.24')
y luego los productos terminados:
Código SQL:
Ver original
  1. SELECT VD.producto_nombre
  2. FROM ventas VE
  3.     INNER JOIN ventas_detalles VD ON VE.correlativo = VD.correlativo_principal
  4.     INNER JOIN productos_compuestos PC ON VD.producto_codigo = PC.codigo_producto
  5.     INNER JOIN productos_compuestos_partes PCP ON PC.codigo_producto = PCP.parte_producto_codigo
  6.     INNER JOIN productos_terminados PT ON PCP.parte_producto_codigo = PT.codigo_producto
  7. WHERE
  8.     (PT.nombre LIKE '%ADR%') )

Si falla la primera, los JOINs no se cumplen todos.
Si falla la fecha (muy probable), el formato usado no es correcto.
Como sea, hay que depurar una a una.
Usare tu ejemplo, por la fecha no me preocupo porque es una BD Interbase (Firebird) y pues asi me pide que coloque las fechas para las consultas.. Gracias por la sugerencia la tomare en cuenta.