Query carga laboral

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:

image

Alguno tienen una idea de porque pasa esto? y como podría solucionarlo??

Gracias

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.

2 Me gusta

Gracias, eso puede ser, voy a probar a ver que tal me va y actualizo por aca.

1 me gusta

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:

CONSULTA SAPB1

y me gustaría que quedara algo así:

image

Tienes alguna idea de como podría solucionar esto??

Gracias

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]
1 me gusta

Gracias Gera, lo hice tal cual como indicaste y sigue sin darme el resultado que quiero:

image

No logro todavía dar con el resultado que busco

A simple vista podemos ver que sigues agregando campos de más en el group by, recuerda que en ese apartado solo debe ir la fecha.

Fue un error mio dejarlo en el query que te anexe, lo corrijo.

Tienes razón, tenia mas campos en group by, lo correji pero aparentemente sige duplicando (o triplicando) las facturas emitidas:

image

En la fecha seleccionada no emitimos 120 facturas :pensive: sino 28

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]
1 me gusta