Buenas, Quería hacer una consulta sobre un query que estoy intentando generar. Yo necesito generar columnas con Stock, ordenes de compra pendientes, pedidos de clientes, y ventas en un período. Tengo dos temas, por un lado las ventas por período las separa por cada venta, y necesitaría el total. Y por otro quisiera que se incluyan todos los arts y no sólo los que tienen venta. Esto es lo que arme:
SELECT T1."ItemCode", T1."ItemName", T1."OnHand"Stock, T1."OnOrder"OC, T1."IsCommited"NP, sum(T0."Quantity") FROM INV1 T0 INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode" INNER JOIN OITW T2 ON T1."ItemCode" = T2."ItemCode" WHERE T2."WhsCode" = 01
AND
T1."CardCode" = [%0] GROUP BY T1."ItemCode",T1."ItemName", T1."OnHand", T1."IsCommited", T1."OnOrder", T0."Quantity"
Para obtener el total de ventas por período en lugar de separarlas por cada venta, puedes quitar T0.“Quantity” de la cláusula GROUP BY. Eso debería darte el total de ventas por período en lugar de separarlas por cada venta.
En cuanto a incluir todos los artículos y no solo los que tienen venta, puedes cambiar el INNER JOIN entre las tablas INV1 y OITM por un LEFT JOIN. Esto debería incluir todos los artículos en la tabla OITM, incluso si no tienen ventas en la tabla INV1.
Como ejemplo podría quedar algo así, recuerda personalizarla según tus necesidades:
SELECT T1.“ItemCode”, T1.“ItemName”, T1."OnHand"Stock, T1."OnOrder"OC, T1."IsCommited"NP, sum(T0.“Quantity”)
FROM OITM T1
LEFT JOIN INV1 T0 ON T0.“ItemCode” = T1.“ItemCode”
INNER JOIN OITW T2 ON T1.“ItemCode” = T2.“ItemCode”
WHERE T2.“WhsCode” = 01
AND
T1.“CardCode” = [%0]
GROUP BY T1.“ItemCode”,T1.“ItemName”, T1.“OnHand”, T1.“IsCommited”, T1.“OnOrder”
Excelente, muchas gracias por tu ayuda, me funciono a la perfección con esos cambios que me sugeriste. Te hago otra consulta rápida, para incluir los datos de ventas por período separados en columnas( ventas del mes actual, ventas del mes pasado) eso debería definirlo en “where” no? y en select incorporar dos veces el "quantity con diferentes nombres?
Sí, puedes agregar condiciones en el WHERE para filtrar las ventas por período y luego usar la función SUM con un CASE en el SELECT para separar las ventas en diferentes columnas.
Algo así:
SUM(CASE WHEN MONTH(T0.“DocDate”) = MONTH(CURRENT_DATE) THEN T0.“Quantity” ELSE 0 END) AS VentasMesActual,
SUM(CASE WHEN MONTH(T0.“DocDate”) = MONTH(CURRENT_DATE) - 1 THEN T0.“Quantity” ELSE 0 END) AS VentasMesPasado
En ese ejemplo, son funciones de fecha como MONTH y CURRENT_DATE para filtrar las ventas por mes. También se usa el SUM con un CASE para separar las ventas en dos columnas diferentes: una para el mes actual y otra para el mes pasado.
Si, me sirvió también, gracias por la ayuda, soy nuevo con el uso y me voy adecuando para tener todo al momento que se haga el cambio de sistema. Creo que me voy a hacer algún cursillo de sql para terminar de internalizar estos temas. Mil gracias Cassales