Usuario
KARDEX APLICANDO EL METODO PROMEDIO PONDERADO

Pregunta
-
Buenas tardes
Necesito ayuda, tengo que hacer un kardex aplicando el metodo promedio ponderado, esta es la consulta que tengo hasta el momento.
SELECT
CONVERT(DATE,AI.AdjustTime) AS FECHA
,AI.INVENNUM AS ID_PROD
,(SELECT INV.DESCRIPT FROM DBA.inventory INV WHERE INV.INVENNUM=AI.INVENNUM) AS DETALLE
,(CASE
WHEN AI.Reason='POS Used' AND AI.ADJUSTUNITS=1 and AI.PURID=1003 then 'EI' || AI.INVENNUM
ELSE
(CASE
WHEN AI.TRANSNUM<>1003 AND AI.ADJUSTTYPE=1 THEN 'II' || AI.INVENNUM
END)
END) AS COMPROBANTE
,AI.WAREHOUSENUM AS BO
,ISNULL(AI.ADJUSTUNITS,0) AS CANTIDAD
,ISNULL(AI.PURPRICE,0) AS COST_UNI
,ISNULL((CANTIDAD*COST_UNI),0) AS COST_TOT
,ISNULL((SELECT STD.STARTINV FROM DBA.StockTakeDetail STD WHERE CONVERT(DATE,AI.AdjustTime)=CONVERT(DATE,STD.StartDate) AND STD.STOCKTAKENUM=2001),0) AS SALDO_INI
FROM DBA.AdjustInventory AI
WHERE INVENNUM=2148Estos son los datos que tengo hasta el momento.
No logro aplicar el metodo promedio ponderado. :(
Por favor alguna idea de como podria empezar.
En la columna comprobante los II=COMPRAS y EI=VENTAS.
Saludos.
Todas las respuestas
-
-
-
Bueno investigando un poco más en tú consulta, creo que tienes que hacerlo de otro modo. Mira esto por si se acerca a lo que quieres.
SELECT CONVERT(DATE, AI.AdjustTime) AS FECHA, AI.INVENNUM AS ID_PROD, INV.DESCRIPT AS DETALLE, (CASE WHEN AI.Reason = 'POS Used' AND AI.ADJUSTUNITS = 1 AND AI.PURID = 1003 THEN 'EI' + AI.INVENNUM /* al no haber else, realmente solo tienes que hacer un case, no hace falta anidarlo */ WHEN AI.TRANSNUM <> 1003 AND AI.ADJUSTTYPE = 1 THEN 'II' + AI.INVENNUM END) AS COMPROBANTE, AI.WAREHOUSENUM AS BO, ISNULL(AI.ADJUSTUNITS, 0) AS CANTIDAD, ISNULL(AI.PURPRICE, 0) AS COST_UNI, ISNULL((CANTIDAD * COST_UNI), 0) AS COST_TOT, ISNULL(STD.STARTINV,0) AS SALDO_INI FROM DBA.AdjustInventory AI LEFT JOIN DBA.inventory INV ON INV.INVENNUM = AI.INVENNUM LEFT JOIN DBA.STOCKTAKEDETAIL STD ON CAST(STD.STARTDATE AS DATE) = CAST(AI.ADJUSTTIME AS DATE) AND STD.STOCKAKENUM = 2001 AND STD.INVENNUM = AI.INVENUM /* supongo que inventario se relacionará con stock al menos por el codigo de producto*/ WHERE INVENNUM = 2148;
Intenta evitar las subconsultas.
Te he relacionado los conjuntos por si no hubiese stock, y si no hubiese inventarios, pero esta parte necesita de tú aporte o validación
-
-
Hola NancyMa:
Mira a ver si te funcionan correctamente las sugerencias que te he indicado en el anterior mensaje, ya que evitar el uso de subconsultas, es igual de bueno en todos los SBGD.
Creo que la consulta debiera de funcionarte, pero mi conocimiento de SyBase es nulo.
Suerte
-