on 10-10-2014 8:18 PM
Hola,
Tengo la necesidad de crear un reporte de que me traiga todos los artículos en el inventario y también las ventas de estos artículos, ya tengo la consulta que me trae los artículos y su stock por almacén, mi duda es como hacer la condición o query para que me traiga las ventas de dichos artículos.
Algo así tengo que presentar.
Por el momento tengo esto
SELECT T0.ItemCode as IDArticulo, T0.Dscription Articulo, T0.OnHand AS 'Stock Total', T0.DistNumber Lote,
T1.WhsCode IDAlmacen, T3.WhsName Almacen,T0.ItmsGrpCod IDGrupo,T0.ItmsGrpNam Grupo, T0.U_UnidadNegocio UnidadNegocio, T1.OnHand Stock, T0.[Vendido],
T0.U_Color Color, T0.U_Fabric Fabricante, T0.U_Modelo Modelo, T0.U_SeasonPr TemporadaPr , T0.U_Year Año, T0.LastPurPrc UltimoPrecioCompra, T0.Price Precio
FROM
( SELECT T10.ItemCode, T10.Dscription, T11.OnHand, T12.DistNumber, T11.ItmsGrpCod, T13.ItmsGrpNam, T11.U_UnidadNegocio,
T11.U_Color, T11.U_Fabric, T11.U_Modelo, T11.U_SeasonPr, T11.U_Year, T11.LastPurPrc, T14.Price,
'Vendido'=(SELECT Count(OutQty) as Vendidos FROM OINM WHERE TransType = 13
AND ItemCode = T10.ItemCode GROUP BY OutQty)
FROM INV1 T10 INNER JOIN OITM T11 ON T10.ItemCode = T11.ItemCode
INNER JOIN OBTN T12 ON T12.ItemCode = T11.ItemCode
INNER JOIN OITB T13 ON T13.ItmsGrpCod = T11.ItmsGrpCod
INNER JOIN ITM1 T14 ON T14.ItemCode = T11.ItemCode
WHERE T11.Onhand > 0 and T14.PriceList = '1'
GROUP BY T10.ItemCode, T10.Dscription, T11.OnHand, T12.DistNumber, T11.ItmsGrpCod, T13.ItmsGrpNam, T11.U_UnidadNegocio, T11.U_Color, T11.U_Fabric, T11.U_Modelo, T11.U_SeasonPr, T11.U_Year, T11.LastPurPrc, T14.Price) T0
INNER JOIN OITW T1 ON T0.ItemCode = T1.ItemCode AND T1.OnHand > 0
INNER JOIN OWHS T3 ON T3.WhsCode = T1.WhsCode
WHERE T0.ItemCode = '50644582059'
ORDER BY T0.ItemCode
Este query me muestra la siguiente información
hasta el momento me muestra los artículos por almacén y el stock de los mismos, ahora quier saber cuantos artículos se vendieron por almacen, al hacer el query me suma las ventas del artículo pero de todos los almacenes y en la columna de Vendido aparece 8 pero lo correcto es algo como esto.
No se como agregar este query para que divida las ventas por almacén.
Agradezco sus respuesta,
Saludos!
Hola Claudia.
En el query te falta agrupar por almacén y por eso te suma todos los almacenes en el subquery de Vendido. Además que veo usas la función COUNT y lo recomendable sería usar la función SUM.
Intenta editar el subquery de Vendidon para que quede así:
Select sum(OutQty) from OINM JC where JC.TransType = '13' and JC.ItemCode =T0.ItemCode and JC.WhsCode = T0.WhsCode
Revísalo y nos cuentas cómo te fue...
Saludos,
JC.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hola Juan,
Gracias por tú respuesta, tenias razón ahora ahora el query ya me trae el numero de artículos por almacén.
Sólo que ahora tengo otro problema, tengo el campo stock total que es la suma del articulo en todos los almacenes, pero necesito la suma de artículos por almacén, como cambie el query para resolver el problema 1, ahora el query me multiplica filas cuando mando traer el OnHand por almacén.
Anteriormente traía el stock total y el stock por almacén de forma correcta pero si antes traía 5 columnas ahora me manda 25, no se porque sucede esto.
el query quedo de está forma:
SELECT T0.ItemCode as IDArticulo, T0.Dscription Articulo, T0.OnHand AS 'Stock Total', T0.DistNumber Lote,
T0.WhsCode IDAlmacen, T0.WhsName Almacen,
T1.Onhand as Stock,
T0.ItmsGrpCod IDGrupo,T0.ItmsGrpNam Grupo, T0.U_UnidadNegocio UnidadNegocio, T0.[Vendido],
T0.U_Color Color, T0.U_Fabric Fabricante, T0.U_Modelo Modelo, T0.U_SeasonPr TemporadaPr ,
T0.U_Year Año, T0.LastPurPrc UltimoPrecioCompra, T0.Price Precio
FROM
( SELECT T10.ItemCode, T10.Dscription, T11.OnHand, T12.DistNumber, T11.ItmsGrpCod, T13.ItmsGrpNam, T11.U_UnidadNegocio,
T11.U_Color, T11.U_Fabric, T11.U_Modelo, T11.U_SeasonPr, T11.U_Year, T11.LastPurPrc, T14.Price, T16.WhsCode, T16.WhsName, t15.Onhand as Stock,
'Vendido'=(SELECT Sum(OutQty) as Vendidos FROM OINM WHERE TransType = '13'
AND ItemCode = T10.ItemCode and Warehouse = T16.WhsCode GROUP BY OutQty)
FROM INV1 T10 INNER JOIN OITM T11 ON T10.ItemCode = T11.ItemCode
INNER JOIN OBTN T12 ON T12.ItemCode = T11.ItemCode
INNER JOIN OITB T13 ON T13.ItmsGrpCod = T11.ItmsGrpCod
INNER JOIN ITM1 T14 ON T14.ItemCode = T11.ItemCode
INNER JOIN OITW T15 ON T11.ItemCode = T15.ItemCode AND T15.OnHand > 0
INNER JOIN OWHS T16 ON T16.WhsCode = T15.WhsCode
WHERE T11.Onhand > 0 and T14.PriceList = '1'
GROUP BY T10.ItemCode, T10.Dscription, T11.OnHand, T12.DistNumber, T11.ItmsGrpCod, T13.ItmsGrpNam,
T11.U_UnidadNegocio, T11.U_Color, T11.U_Fabric, T11.U_Modelo, T11.U_SeasonPr, T11.U_Year,
T11.LastPurPrc, T14.Price, T16.WhsCode, T16.WhsName, T15.OnHand) T0
INNER JOIN OITW T1 ON T0.ItemCode = T1.ItemCode AND T1.OnHand > 0
WHERE T0.ItemCode = '50644582059'
ORDER BY T0.ItemCode
Agradezco su apoyo.
Necesitas ampliar el JOIN T15 (OITW) para que también se haga el match con WhsCode. No tengo acceso de momento a una BD de SAP como para hacer pruebas, pero yo pondría tu INNER JOIN así:
INNER JOIN OITW T15 ON T11.ItemCode = T15.ItemCode and T10.WhsCode = T15.WhsCode AND T15.OnHand > 0
Lo anterior para la "tabla" T0 que construyes para tu FROM principal, y también haz algo similar en el INNER JOIN de OITW general (T1), para que quede así:
INNER JOIN OITW T1 ON T0.ItemCode = T1.ItemCode and T0.WhsCode = T1.WhsCode AND T1.OnHand > 0
Lo que pasa es que como OITW guarda la información de todos los almacenes, tu query te va estar repitiendo la información si no relacionas también el código de almacén desde alguna tabla.
Espero te sea de utilidad esta información.
Saludos,
JC.
User | Count |
---|---|
89 | |
8 | |
7 | |
4 | |
4 | |
3 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.