Hola a todos, estoy tratando de hacer un query que me arroje un informe de carga laboral entre dos fechas en un determinado almacén (B1 en este caso), y eso lo hago haciendo la sumatoria de todas las facturas emitidas en un día y la cantidad de artículos facturados ese mismo día; pero por alguna razón parece que el numero de facturas emitidas me aparece un distorsionado (mucho mas facturas emitidas de las que debería).
En el ejemplo que les voy a mostrar aparecen 74 picking preparados (o facturas emitidas) y se que en realidad fueron menos de 30 las que se emitieron en realidad en la fecha seleccionada.
Adjunto codigo:
SELECT T0.[DocDate], COUNT(T0.[DocNum]) AS 'Picking preparados', SUM(T1.[Quantity]) as 'Cantidad de Articulos'
FROM OINV T0 INNER JOIN INV1 T1 ON T0.[DocEntry] = T1.[DocEntry]
WHERE T0.[DocDate] >= [%0] AND T0.[DocDate] <= [%1] AND T1.[WhsCode] IN ('B1')
GROUP BY T0.[DocDate]
Adjunto imagen del resultado:
Alguno tienen una idea de porque pasa esto? y como podría solucionarlo??
hola @JuanR, en ese reporte quita las funciones Sum y Count, así verás como se componen los 74 documentos… es probable esté duplicando las facturas que tienen más de una línea… a lo mejor y con un subquery puedes hacer alguno de los dos cálculos.
Hola Oscar, aplique unas modificaciones al código para poder ver mejor que es lo que se esta duplicando y quedo asi:
SELECT T0.[DocDueDate], COUNT (T0.[FolioNum]) AS 'Picking preparados', SUM (T1.[Quantity]) as 'Cantidad de Articulos', T1.[ItemCode]
FROM OINV T0 INNER JOIN INV1 T1 ON T0.[DocEntry] = T1.[DocEntry]
WHERE T0.[DocDueDate] >= [%0] AND T0.[DocDueDate] <= [%1]
GROUP BY T0.[DocDueDate], T0.[FolioNum], T1.[Quantity], T1.[ItemCode]
y en el resultado puedo ver que se duplican los números de folio, puede ser por lo que me comentaste y queda de esta manera:
y me gustaría que quedara algo así:
Tienes alguna idea de como podría solucionar esto??
Para esto tendrías que quitar de tu select el número de artículo y agregar la sumatoria de ventas… y en el “Group By” dejar solo la fecha. Cuando aplicas “SUM” ya estás agrupando ese campo, no necesitas agregarlo en el “Group By”
SELECT T0.[DocDueDate], COUNT (T0.[DocNum]) AS 'Facturas emitidas', SUM (T1.[Quantity]) as 'Cantidad Despachada', SUM(T1.LineTotal) as 'Importe vendido'
FROM OINV T0 INNER JOIN INV1 T1 ON T0.[DocEntry] = T1.[DocEntry]
WHERE T0.[DocDueDate] >= [%0] AND T0.[DocDueDate] <= [%1]
GROUP BY T0.[DocDueDate]
Ah ya… lo que pasa es que estás contando las líneas, no las facturas… para eso tienes que restructurar tu query y no hacer join con la INV1. Las sumatorias tendrían que venir por medio de una subconsulta, ejemplo:
SELECT T0.[DocDueDate], SUM(T0.DocEntry) as 'Total facturas', (Select SUM(T1.Quantity) FROM INV1 T1 Inner Join OINV T2 On T2.DocEntry = T1.DocEntry Where T2.[DocDueDate] = T0.DocDueDate) as 'Suma de cantidad'
FROM OINV T0
WHERE T0.[DocDueDate] >= '20200101' AND T0.[DocDueDate] <= '20200301'
GROUP BY T0.[DocDueDate]