cancel
Showing results for 
Search instead for 
Did you mean: 

Query ventas con inventario por almacen.

Former Member
0 Kudos

Estoy haciendo un reporte que me de las ventas por mes sumarizadas, asi mismo me de el stock disponible que hay en el almacen en ese momento, lo estoy haciendo por medio de reporting services por que necesito que personas que no tienen SAP lo consulten, por lo cual se ven parametros como @algo pero para el caso de sap solo cambia eso. Mi problema es que me esta duplicando los resultados, es decir....si en ese mes hubo 2 ventas me pone 2 veces el articulo cuando deberia estar sumarizado por mes, si se hicieron 4 ventas de un articulo pues me sale 4 veces el mismo.

El query es este:

SELECT DISTINCT T1.ItemCode as Articulo, T1.[Dscription] as Descripcion,T1.WhsCode,

CASE WHEN Month(T0.Docdate)=1 then (T1.Quantity) else 0 END as Enero,

CASE WHEN Month(T0.Docdate)=2 then (T1.Quantity) else 0 END as Febrero,

CASE WHEN Month(T0.Docdate)=3 then (T1.Quantity) else 0 END as Marzo,

CASE WHEN Month(T0.Docdate)=4 then (T1.Quantity) else 0 END as Abril,

CASE WHEN Month(T0.Docdate)=5 then (T1.Quantity) else 0 END as Mayo,

CASE WHEN Month(T0.Docdate)=6 then (T1.Quantity) else 0 END as Junio,

CASE WHEN Month(T0.Docdate)=7 then (T1.Quantity) else 0 END as Julio,

CASE WHEN Month(T0.Docdate)=8 then (T1.Quantity) else 0 END as Agosto,

CASE WHEN Month(T0.Docdate)=9 then (T1.Quantity) else 0 END as Septiembre,

CASE WHEN Month(T0.Docdate)=10 then (T1.Quantity) else 0 END as Octubre,

CASE WHEN Month(T0.Docdate)=11 then (T1.Quantity) else 0 END as Noviembre,

CASE WHEN Month(T0.Docdate)=12 then (T1.Quantity) else 0 END as Diciembre,

ISNULL((SELECT DISTINCT (SUM(Y.InQty)-SUM(Y.OutQty))FROM OINM Y WHERE Y.ItemCode = T1.ItemCode AND Y.Warehouse = T1.WhsCode),0) as 'Stock'

FROM OINV T0

INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry

INNER JOIN OSLP T2 ON T0.SlpCode = T2.SlpCode

INNER JOIN OITW T3 ON T1.ItemCode = T3.ItemCode

WHERE T0.Docdate>=@Inicial and T0.Docdate<=@Final AND T1.TargetType <> '14' AND T1.WhsCode=@Almacen

Order by T1.ItemCode

Accepted Solutions (1)

Accepted Solutions (1)

0 Kudos

Carlos, creo que te da mas lineas porque no estas sumando la cantidad vendida en el mes tu case podria ser:


CASE WHEN Month(T0.Docdate)=1 then SUM(T1.Quantity) else 0 END as Enero

para que sume lo vendido en Enero.

Una observacion si lo haces asi con CASE sino estoy mal el resultado final seria asi para un producto:

Item     Enero     Febrero     Marzo

item1     10               0               0

item1      0               10               0

item1      0               0               10

pero has tus pruebas, si el resultado es el que te indico y no es como lo necesitas podrias probarlo con subquerys.

Former Member
0 Kudos

La sumatoria se hace a nivel de ReportingServices, vaya trate de hacer lo menos en el query y dejarle la tarea al RS, pero si, esa sumatoria si esta.

Former Member
0 Kudos

Gustavo, ya puse el Query en su parte de Group By pero me sigue haciendo lo mismo, me duplica los resultados dependiendo si hubo 2 ventas o 4 veces si hubo 4 ventas.

De hecho me da otros resultados en las sumas de cantidad vendida con ese group by.....

former_member413321
Contributor
0 Kudos

Hola,

     Como dijo Gustavo, debes colocarle el SUM,

  Y en el group by van los campos de la primer linea mas, Month(T0.DocDate), para que te muestre los datos correctos.

Former Member
0 Kudos

El SUM se hace a nivel de ReportingServices, si se hace el sum desde query salen otros resultados no correctos.

former_member413321
Contributor
0 Kudos

Hola,

     Si disculpa el SUM debe ser antes de cada case.

Entonces queda asi. SUM(Case when Month(T0.DocDate)= 1 then T1.Quantity else 0 end) as Enero

Y asi para todos lo meses.

en el group by Solo itemcode, Description y WhsCode.

Con esto tienes la consulta como la necesitas

Former Member
0 Kudos

Gracias Alejandro, con el SUM antes del CASE me funciono.

Dejo aqui como quedo el query, le quite algunas cosas que no estaba usando.

SELECT DISTINCT T1.ItemCode as Articulo,T1.[Dscription] as Descripcion,T1.WhsCode as Almacen,

SUM(CASE WHEN Month(T1.Docdate)=1 then (T1.Quantity) else 0 END) as Enero,

SUM(CASE WHEN Month(T1.Docdate)=2 then (T1.Quantity) else 0 END) as Febrero,

SUM(CASE WHEN Month(T1.Docdate)=3 then (T1.Quantity) else 0 END) as Marzo,

SUM(CASE WHEN Month(T1.Docdate)=4 then (T1.Quantity) else 0 END) as Abril,

SUM(CASE WHEN Month(T1.Docdate)=5 then (T1.Quantity) else 0 END) as Mayo,

SUM(CASE WHEN Month(T1.Docdate)=6 then (T1.Quantity) else 0 END) as Junio,

SUM(CASE WHEN Month(T1.Docdate)=7 then (T1.Quantity) else 0 END) as Julio,

SUM(CASE WHEN Month(T1.Docdate)=8 then (T1.Quantity) else 0 END) as Agosto,

SUM(CASE WHEN Month(T1.Docdate)=9 then (T1.Quantity) else 0 END) as Septiembre,

SUM(CASE WHEN Month(T1.Docdate)=10 then (T1.Quantity) else 0 END) as Octubre,

SUM(CASE WHEN Month(T1.Docdate)=11 then (T1.Quantity) else 0 END) as Noviembre,

SUM(CASE WHEN Month(T1.Docdate)=12 then (T1.Quantity) else 0 END) as Diciembre,

ISNULL((SELECT DISTINCT (SUM(Y.InQty)-SUM(Y.OutQty))FROM OINM Y WHERE Y.ItemCode = T1.ItemCode AND Y.Warehouse = T1.WhsCode),0) as 'Stock'

FROM INV1 T1

WHERE T1.Docdate>=@Inicial and T1.Docdate<=@Final AND T1.TargetType <> '14' AND T1.WhsCode=@Almacen

Group By T1.ItemCode,T1.[Dscription],T1.WhsCode

Order by T1.ItemCode

Muchas Gracias por su ayuda.

Answers (0)