[VFP] Punto de reposición mediante un SELECT SQL

78 views
Skip to first unread message

ZeRoberto

unread,
Jul 26, 2014, 12:38:40 AM7/26/14
to publicesvfoxpro
Como obtener un lista de productos en punto de reposición mediante un SELECT

SELECT a.*,  b.Demanda
             FROM productos a
                      LEFT JOIN (SELECT a.ProductoID, a.Tipo, AVG(a.Total) Demanda 
                                        FROM (SELECT ProductoID, Fecha, SUM(Cantidad * IF(Estado = '9', 0, 1)) Total
                                                     FROM ventas_lineas WHERE Fecha BETWEEN ?ldDesde AND ?ldHasta
                                                     GROUP BY 1, 3) a) b ON b.ProductoID = a.ProductoID AND b.Tipo = a.Tipo
                      LEFT JOIN lineas c ON c.LineaID = a.LineaID
                      LEFT JOIN familias d ON d.FamiliaID = a.FamiliaID
                      LEFT JOIN marcas e ON e.MarcaID = a.MarcaID
                WHERE a.Stock < (a.StockMin + (?lnNumeroDias * b.Demanda))

--
btnMyVideo.Click()

mpulla

unread,
Jul 27, 2014, 10:10:07 AM7/27/14
to publice...@googlegroups.com
Hola Ze Roberto.

Para este tipo de preguntas deberías dar a conocer el SGDB que usas, la estructura de tus tablas, data de ejemplo y el resultado que esperas.

No entiendo tu sql y a mi parecer tiene varios errores.
Puedes explicar que hace el alias
a está línea: GROUP BY 1, 3) a) b ON b.ProductoID = a.ProductoID AND b.Tipo = a.Tipo

Prueba este Sql a lo mejor te sirve:


SELECT a.*,  b.Demanda
 FROM productos a LEFT JOIN
     (SELECT ProductoID, avg(Cantidad) * ?lnNumeroDias demanda

       FROM ventas_lineas
        WHERE Fecha BETWEEN ?ldDesde AND ?ldHasta
          AND Estado <> '9'
         GROUP BY ProductoID) b ON b.ProductoID = a.ProductoID
  WHERE a.Stock < a.StockMin + b.Demanda

Saludos.
Mauricio

ZeRoberto

unread,
Jul 27, 2014, 4:08:51 PM7/27/14
to publicesvfoxpro
Hola Mauricio gracias por contestar, estoy usando MySQL la sentencia me funciona bien no tiene errores, pero no me trae la información no se si estará bien echa.

ZeRoberto

unread,
Jul 27, 2014, 4:35:23 PM7/27/14
to publicesvfoxpro
Hola Mauricio gracias por contestar, estoy usando MySQL la sentencia me funciona bien no tiene errores, pero no me trae la información no se si estará bien echa.

El 27 de julio de 2014, 9:10, 'mpulla' via Comunidad de Visual Foxpro en Español <publice...@googlegroups.com> escribió:

Antonio Meza

unread,
Jul 27, 2014, 9:06:14 PM7/27/14
to publice...@googlegroups.com
Checa los LEFT JOIN que realmente tengan registros las tablas de detalles o mejor usar LEFT OUTER JOIN pero segun sea el caso.

saludos

mpulla

unread,
Jul 28, 2014, 12:08:10 PM7/28/14
to publice...@googlegroups.com

Hola Ze Roberto.

Para mi debería darte error, pero no conozco MySql en todo caso ayúdame a entenderlo..

Cuando te apoyas en tablas derivadas para hacer los cálculos.

En la tabla derivada interna, haces un IF(Estado = '9', 0, 1), no sería mejor filtrarlo en el where?
Cuál es el tercer campo al que te refieres en GROUP BY 1, 3 ?

No entiendo cuando a la tabla derivada interna le das el alias "a" y luego te refieres al campo a.tipo, cuando la tabla deriva interna no tiene ese campo
(

SELECT a.ProductoID, a.Tipo, AVG(a.Total) Demanda 
FROM (SELECT ProductoID, Fecha, SUM(Cantidad * IF(Estado = '9', 0, 1)) Total
       FROM ventas_lineas WHERE Fecha BETWEEN ?ldDesde AND ?ldHasta
        GROUP BY 1, 3

      ) a) b ON b.ProductoID = a.ProductoID AND b.Tipo = a.Tipo

En la consulta que te recomendé anteriormente no tome en cuenta el número de días transcurridos en el periodo de tiempo, pienso que este Sql te serviría.

liDiasDelPeriodo = ldHasta -ldDesde


SELECT a.*,  b.Demanda
 FROM productos a LEFT JOIN
     (SELECT ProductoID, (avg(Cantidad) / ?liDiasDelPeriodo) * ?lnNumeroDias demanda

Carlos Miguel FARIAS

unread,
Jul 29, 2014, 8:01:25 AM7/29/14
to Grupo Fox
En la sentencia SQL (en azul) externa, estaría faltando agrupamiento, ya que hay columnas no "sumarizadas" y en la interna, no puedes agrupar por una columna "sumaria".
Sumaria..Sumarizada: Columnas de tablas que están dentro de una función SQL como SUM, AVG, MAX, MIN y COUNT()
Saludos: Miguel, La Pampa (RA)
Reply all
Reply to author
Forward
0 new messages