cancel
Showing results for 
Search instead for 
Did you mean: 

Reporte Precios/Costos.

Former Member
0 Kudos

Buenos días,

Tengo la siguiente consulta:

SELECT T0.[ItemCode]as codigo, T0.[ItemName] as Descripcion, T0.[OnHand]as existencia, T1.[Price] AS 'Precio Base',T0.[LastPurPrc]as 'Ultimo Precio de Compra', T3.[AvgPrice]'Costo', T4.[WhsName]
FROM OITM T0  
	INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode AND T1.PRICELIST = 1  
	INNER JOIN ITM1 T2 ON T0.ITEMCODE = T2.ITEMCODE AND T2.PRICELIST = 2
              INNER JOIN OITW T3 ON T0.ItemCode = T3.ItemCode
              INNER JOIN OWHS T4 ON T3.WhsCode = T4.WhsCode

Ahora lo que esta pasando es lo siguiente: como veran se trae el codigo del articulo, descripcion, existencia, precio base, ultimo precio de compra, costo y almacenes, este costo viene de la tabla OITW junto con los almacenes, lo que sucede cuando ejecuto el reporte es que por cada articulo se trae los 10 almacenes que tengo creado, tengan o no costos, lo que quisiera es que cuando lo ejecute solo se traiga un solo almacen y que sea el almcen que tenga el costo mayor.

Por favor si me pueden ayudar con esto.

Salos y gracias de antemano.

Accepted Solutions (1)

Accepted Solutions (1)

angeles804
Active Contributor
0 Kudos

agregale un distinct() y selecciona el max (t0.avgprice) en el oitw. tienes que agrouparlo en el último para que salga el almacen.

:D!

Former Member
0 Kudos

No se dime tu si lo que hice es lo correcto o como seria, porque igual no hace lo que quiero O.o

SELECT DISTINCT T0.[ItemCode]as codigo, T0.[ItemName] as Descripcion, T0.[OnHand]as existencia, T1.[Price] AS 'Precio Base',T0.[LastPurPrc]as 'Ultimo Precio de Compra', max (t3.AvgPrice)'Costo', T4.[WhsName]
FROM OITM T0  
	INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode AND T1.PRICELIST = 1  
	INNER JOIN ITM1 T2 ON T0.ITEMCODE = T2.ITEMCODE AND T2.PRICELIST = 2
              INNER JOIN OITW T3 ON T0.ItemCode = T3.ItemCode
              INNER JOIN OWHS T4 ON T3.WhsCode = T4.WhsCode
WHERE T3.[AvgPrice] > 0
GROUP BY T4.[WhsName], T0.[ItemCode], T0.[ItemName], T0.[OnHand], T1.[Price],T0.[LastPurPrc], T3.[AvgPrice]

angeles804
Active Contributor
0 Kudos

mira, busca transact sql y encontraras funciones como MIN, MAX y AVG para poder seleccionar el mas grande o menor de una columna, sumar o promediar. ahorita estaba pensando en como hacer una. pero tengo una pregunta, quieres el mayor costo de todos los almacenes, verdad?, es que ando pensando como hacer eso. oks.

Former Member
0 Kudos

Si el mayor costo por almacen, ej:

art. x1 : almacen 1: costo 1000, almacen 2: 1500, almacen 3: 900

Cuando yo ejecute el reporte yo quisiera que se trajese solo el almacen con el costo mayor (AvgPrice).

deberia traerme del ej anterior:

art. x1. 1500 almacen 2.

angeles804
Active Contributor
0 Kudos

A VER, INTENTA con este código, lo que sucede es que yo no manejo los costos en los almacenes, si no es un costo global. el que viene en el dato maestro.


SELECT DISTINCT(T0.[ItemCode]), T1.[ItemName], T2.WHSNAME,MAX(T0.[AvgPrice]) 
FROM OITW T0  
INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode
INNER JOIN OWHS T2 ON T0.WHSCODE=T2.WHSCODE
where t0.avgprice>0
 GROUP BY T0.[ItemCode], T1.[ItemName], T2.[WhsNAME]

CHECA SI ESTO TE SIRVE ES PARA costos, pero también quieres precios nop??

Former Member
0 Kudos

Con este que me pasas trae los almacenes que tengan costo.

Por ej. Art. x1, almacen 1: 1000, almacen 2: 1500

Se trae 2 lineas:

-Art. x1: 1000 almacen 1

-Art. x1: 1500 almacen 2

Y asi hace con todos los articulos que tienen mas de un almacen con costo. :s

angeles804
Active Contributor
0 Kudos

me pones tu query, para checarlo?. Y ASI??.. A MI ME TRAE VARIOS ALMACENES POR QUE TIENEN EL MISMO COSTO.


SELECT DISTINCT(T1.[WHSCODE]),T0.ITEMCODE, T0.[ItemName], T2.[WhsNAME],MAX(T1.[AvgPrice]) 
FROM OITM T0  
INNER JOIN OITW T1 ON T0.ItemCode = T1.ItemCode
INNER JOIN OWHS T2 ON T1.WHSCODE=T2.WHSCODE
where t1.avgprice>0
 GROUP BY T1.WHSCODE,T0.[ItemCode], T0.[ItemName], T2.[WhsNAME]

Edited by: mary merecias on Aug 19, 2011 1:40 PM

Former Member
0 Kudos
SELECT T0.[ItemCode]as codigo, T0.[ItemName] as Descripcion, T0.[OnHand]as existencia, T1.[Price] AS 'Precio Base',T0.[LastPurPrc]as 'Ultimo Precio de Compra', MAX(t3.AvgPrice)'Costo'
FROM OITM T0  
	INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode AND T1.PRICELIST = 1  
	INNER JOIN ITM1 T2 ON T0.ITEMCODE = T2.ITEMCODE AND T2.PRICELIST = 2
              INNER JOIN OITW T3 ON T0.ItemCode = T3.ItemCode
              INNER JOIN OWHS T4 ON T3.WhsCode = T4.WhsCode
WHERE T3.[AvgPrice] > 0
GROUP BY T4.[WhsName], T0.[ItemCode], T0.[ItemName], T0.[OnHand], T1.[Price],T0.[LastPurPrc], T3.[AvgPrice]
ORDER BY T0.[ItemCode]

El que me acabas de pasar hace lo mismo, repite las lineas de arituculos.

angeles804
Active Contributor
0 Kudos

el distinct ees importante en este caso, por que solo te muestra uno, si pones el nombre de la sucursal te enviará el nombre de la sucursal.


SELECT DISTINCT(T0.[ItemCode])as codigo, t4.whsname,T0.[ItemName] as Descripcion, T0.[OnHand]as existencia, 
T1.[Price] AS 'Precio Base',T0.[LastPurPrc]as 'Ultimo Precio de Compra', MAX(t3.AvgPrice)'Costo'
FROM OITM T0  
	INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode AND T1.PRICELIST = 1  
	INNER JOIN ITM1 T2 ON T0.ITEMCODE = T2.ITEMCODE AND T2.PRICELIST = 2
    INNER JOIN OITW T3 ON T0.ItemCode = T3.ItemCode
    INNER JOIN OWHS T4 ON T3.WhsCode = T4.WhsCode
WHERE T3.[AvgPrice] > 0
GROUP BY  T0.[ItemCode], T4.[WhsName],T0.[ItemName], T0.[OnHand], T1.[Price],T0.[LastPurPrc], T3.[AvgPrice]
ORDER BY T0.[ItemCode]

ejecutalo y me cuentas, por que tal vez a mi también me sirva luego.

Former Member
0 Kudos

aaah sigue repitiendo las lines para aquellos articulos que tienen distintos almacences con costoss

angeles804
Active Contributor
0 Kudos

a ver.

y si lo dejas sin el nombre del almacen. te trae el costo pero no sabes que almacen es.


SELECT DISTINCT(T0.[ItemCode])as codigo, t0.[ItemName] as Descripcion, T0.[OnHand]as existencia, 
T1.[Price] AS 'Precio Base',T0.[LastPurPrc]as 'Ultimo Precio de Compra', MAX(t3.AvgPrice)'Costo'
FROM OITM T0  
	INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode AND T1.PRICELIST = 1  
	INNER JOIN ITM1 T2 ON T0.ITEMCODE = T2.ITEMCODE AND T2.PRICELIST = 2
    INNER JOIN OITW T3 ON T0.ItemCode = T3.ItemCode
    INNER JOIN OWHS T4 ON T3.WhsCode = T4.WhsCode
WHERE T3.[AvgPrice] > 0
GROUP BY  T0.[ItemCode], T0.[ItemName], T0.[OnHand], T1.[Price],T0.[LastPurPrc], T3.[AvgPrice]
ORDER BY T0.[ItemCode]

Former Member
0 Kudos

Si ya habia probado quitandole el nombre del almacen,pero nada aun asi repite las lineas para aquellos articulos con almacenes que tienen costos.

Pero esta faltando como algo mas, porque se le esta diciendo MAX(T3.AvgPrice), pero falta algo mas que ligue esto con los almacenes, algo asi como que traeme el max de este grupo de alamcenes, o mas rebuscado seria que validara cada almacen y mostrar el costo mayor.

costo Almacen 1 > costo almacen 2 si, entonces pase el almacen 1.

costo Almacen 1 >costo almacen 3 no, entonces pase el alamcen 3.

Y asi, no se, seguro hay algun comando que haga esto mas directo.

angeles804
Active Contributor
0 Kudos

espero que este ahora, si te ayude, oks. :D! me dices si funciona


SELECT T0.[ItemCode] as codigo, t0.[ItemName] as Descripcion, T0.[OnHand]as existencia, 
T1.[Price] AS 'Precio Base',T0.[LastPurPrc]as 'Ultimo Precio de Compra', 
(SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)'Costo',
(SELECT WHSCODE FROM OITW WHERE ITEMCODE=T0.ITEMCODE AND (SELECT MAX(AVGPRICE) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)=AVGPRICE)'ALMACEN'
FROM OITM T0  
	INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode AND T1.PRICELIST = 1  
	INNER JOIN ITM1 T2 ON T0.ITEMCODE = T2.ITEMCODE AND T2.PRICELIST = 2
WHERE (SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)>0 
GROUP BY  T0.[ItemCode], T0.[ItemName], T0.[OnHand], T1.[Price],T0.[LastPurPrc]
ORDER BY T0.[ItemCode]

ESto me marco error en el 2007 y sql server 2005, pero en el sap 8.8 funciono bien, lo probe en una version que tengo de prueba. espero que te sirva este query.

SI ESA TE marca error prueba con esta, te vaa poner los repetidos por que tienen el mismo costo. oks?.


SELECT T0.[ItemCode] as codigo, t0.[ItemName] as Descripcion, T0.[OnHand]as existencia, 
T1.[Price] AS 'Precio Base',T0.[LastPurPrc]as 'Ultimo Precio de Compra', T3.WHSCODE,
(SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)'Costo'
FROM OITM T0  
	INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode AND T1.PRICELIST = 1  
	INNER JOIN ITM1 T2 ON T0.ITEMCODE = T2.ITEMCODE AND T2.PRICELIST = 2
        INNER JOIN OITW T3 ON T0.ITEMCODE=T3.ITEMCODE AND (SELECT MAX(AVGPRICE) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)=T3.AVGPRICE
WHERE (SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)>0 
GROUP BY  T0.[ItemCode], T0.[ItemName], T0.[OnHand], T1.[Price],T0.[LastPurPrc],T3.WHSCODE
ORDER BY T0.[ItemCode]


Edited by: mary merecias on Aug 22, 2011 1:39 AM

Edited by: mary merecias on Aug 22, 2011 1:48 AM

Edited by: mary merecias on Aug 22, 2011 1:57 AM

Former Member
0 Kudos

Hola mary,

El segundo que me colocas esta bien, pero seria ideal que hubiese una forma que para aquellos articulos que presenten almacenes con costos iguales apareciera solo uno de los almacenes, porfisss :s

angeles804
Active Contributor
0 Kudos

si no ocupas el nombre del almacen entonces quitamos el codigo del almacen y ponemos un distinct en itemcode, y con eso debe de quedar.


SELECT distinct(T0.[ItemCode]) as codigo, t0.[ItemName] as Descripcion, T0.[OnHand]as existencia, 
T1.[Price] AS 'Precio Base',T0.[LastPurPrc]as 'Ultimo Precio de Compra', 
(SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)'Costo'
FROM OITM T0  
	INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode AND T1.PRICELIST = 1  
	INNER JOIN ITM1 T2 ON T0.ITEMCODE = T2.ITEMCODE AND T2.PRICELIST = 2
        INNER JOIN OITW T3 ON T0.ITEMCODE=T3.ITEMCODE AND (SELECT MAX(AVGPRICE) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)=T3.AVGPRICE
WHERE (SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)>0 
GROUP BY  T0.[ItemCode], T0.[ItemName], T0.[OnHand], T1.[Price],T0.[LastPurPrc],T3.WHSCODE
ORDER BY T0.[ItemCode]
 

mira este es con codigo de almacen. :D!! te trae el primer almacen para que no tengas problemas, de los repetidos. oks?

me dices si funciona



SELECT distinct(T0.[ItemCode]) as codigo, t0.[ItemName] as Descripcion, T0.[OnHand]as existencia, 
T1.[Price] AS 'Precio Base',T0.[LastPurPrc]as 'Ultimo Precio de Compra',
(select  top(1) whscode
     from OITW 
     where itemcode=t0.itemcode and 
            (select max(avgprice) from oitw where itemcode=t0.itemcode)=avgprice)'almacen',
(SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)'Costo'
FROM OITM T0  
	INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode AND T1.PRICELIST = 1  
	INNER JOIN ITM1 T2 ON T0.ITEMCODE = T2.ITEMCODE AND T2.PRICELIST = 2
WHERE (SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)>0 
GROUP BY  T0.[ItemCode], T0.[ItemName], T0.[OnHand], T1.[Price],T0.[LastPurPrc]
ORDER BY T0.[ItemCode]
 

Edited by: mary merecias on Aug 22, 2011 10:31 AM

Edited by: mary merecias on Aug 22, 2011 10:38 AM

angeles804
Active Contributor
0 Kudos

oye si te sirvio el query, para que puedas cerrar el post.. :D! y me pongas los puntos :D! oks. te lo agradeceré

Former Member
0 Kudos

jajaja tranquila Mary que yo siempre doy los ptos , deja que revise bien el reporte y pruebe distintos casos para darte los ptos y cerrar el post 😘

angeles804
Active Contributor
0 Kudos

ah jajaa... ntc. pero esta bien, solo quisiera saber si sirve.

Former Member
0 Kudos

siiii esta perfecta la primera consultaaa :)... Ya tienes tendras tus putos jaja, vale muchas graciass, pero aun no cierro porque me surgio otro asunto.

Al reporte le agregue, un margen (resta entre el precio base - costo), y margen %, ahora que pasa en el margen %, hay % que me trae que si 4367, 9847, etc, montos muy altos y eso es correcto pero no se ve bien, lo que quisiera es que para aquellos % que sean mayor a 1000, entonces que en el reporte aparezca solo 1000 , te paso la consulta como esta hasta ahora.

SELECT distinct(T0.[ItemCode]) as codigo, t0.[ItemName] as Descripcion, T0.[OnHand]as existencia, 
T1.[Price] AS 'Precio Base',T0.[LastPurPrc]as 'Ultimo Precio de Compra', 
(SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)'Costo', T1.[Price] - (SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE) 'Margen', ((T1.[Price] - (SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)) * 100) / (SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE) 'Margen %'
FROM OITM T0  
	INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode AND T1.PRICELIST = 1  
	INNER JOIN ITM1 T2 ON T0.ITEMCODE = T2.ITEMCODE AND T2.PRICELIST = 2
        INNER JOIN OITW T3 ON T0.ITEMCODE=T3.ITEMCODE AND (SELECT MAX(AVGPRICE) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)=T3.AVGPRICE
WHERE (SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)>0 
GROUP BY  T0.[ItemCode], T0.[ItemName], T0.[OnHand], T1.[Price],T0.[LastPurPrc],T3.WHSCODE
ORDER BY T0.[ItemCode]

former_member188440
Active Contributor
0 Kudos

Agrega un CASE


SELECT distinct(T0.[ItemCode]) as codigo, t0.[ItemName] as Descripcion, T0.[OnHand]as existencia, 
T1.[Price] AS 'Precio Base',T0.[LastPurPrc]as 'Ultimo Precio de Compra', 
(SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)'Costo', T1.[Price]
 - (SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE) 'Margen',
'Margen %'= case when ((T1.[Price]
 - (SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)) * 100) / (SELECT MAX(AvgPrice)
 FROM OITW WHERE ITEMCODE=T0.ITEMCODE) >1000 then 1000
else
 ((T1.[Price] - (SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)) * 100) / (SELECT MAX(AvgPrice)
 FROM OITW WHERE ITEMCODE=T0.ITEMCODE) end
FROM OITM T0  
	INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode AND T1.PRICELIST = 1  
	INNER JOIN ITM1 T2 ON T0.ITEMCODE = T2.ITEMCODE AND T2.PRICELIST = 2
        INNER JOIN OITW T3 ON T0.ITEMCODE=T3.ITEMCODE AND (SELECT MAX(AVGPRICE) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)=T3.AVGPRICE
WHERE (SELECT MAX(AvgPrice) FROM OITW WHERE ITEMCODE=T0.ITEMCODE)>0 
GROUP BY  T0.[ItemCode], T0.[ItemName], T0.[OnHand], T1.[Price],T0.[LastPurPrc],T3.WHSCODE
ORDER BY T0.[ItemCode]

Former Member
0 Kudos

Ahora si quedo perfecto, muchas gracias Mauricio, mil gracias a todos.

Answers (1)

Answers (1)

Former Member
0 Kudos

Miguel Angel,

No utilice el INNER JOIN. Esa es la que le trae los registros duplicados. Mejor coloque la tabla en el from pero sin el INNER JOIN y luego en el where haga la asociación como a usted le conviene.

Atte. Rosa