• Lunes 23 de Diciembre de 2024, 03:56

Autor Tema:  creacion de funcion en base a consulta  (Leído 1206 veces)

Mishel

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
creacion de funcion en base a consulta
« en: Viernes 16 de Enero de 2009, 16:08 »
0
Hola amigos no tengo mucha experiencia en funciones de sql pero tengo que hacer una que me lleve el saldo acumulado, tengo la siguiente consulta que me muestra entradas y salidas en las transacciones y otra consulta que me muestra el saldo inicial, pero no se como realizar la funcion para que me lleve el saldo acumulado en base al saldo inicial y sume o reste segun sean entradas o salidas

por favor necesito ayuda ya que estroy trabada en este proyecto, se los agradesco mucho de verdad

--CALCULO DE SALDO INICIAL
SELECT
SUM(CASE WHEN A.TRXQTY>0  THEN A.TRXQTY*QTYBSUOM ELSE 0 END)-abs(SUM(CASE WHEN A.TRXQTY<0 OR A.DOCTYPE='3'  THEN ABS(A.TRXQTY)*QTYBSUOM ELSE 0 END)) AS SALDO_UNIDADES
FROM IV30300 A, IV00101 B
WHERE A.ITEMNMBR BETWEEN '01-01-019' AND '01-01-019'
AND A.DOCDATE < '2008-12-01'
AND A.ITEMNMBR = B.ITEMNMBR



--CALCULO DE ENTRADA Y SALIDA DE TRANSACCIONES

SELECT A.DOCNUMBR,EXTDCOST,DOCDATE,A.ITEMNMBR,TRXQTY,UNITCOST,TRXLOCTN,TRNSTLOC,A.DEX_ROW_ID,DOCTYPE,
(CASE WHEN TRXQTY>0  THEN TRXQTY*QTYBSUOM ELSE 0 END) AS ENTRADA,
(CASE WHEN TRXQTY>0  THEN (TRXQTY*QTYBSUOM)*UNITCOST ELSE 0 END) AS COSTO_ENTRADA,
(CASE WHEN TRXQTY<0 OR DOCTYPE='3' THEN ABS(TRXQTY)*QTYBSUOM ELSE 0 END)AS SALIDA,
(CASE WHEN TRXQTY<0 OR DOCTYPE='3'THEN (ABS(TRXQTY)*QTYBSUOM)*UNITCOST ELSE 0 END)AS COSTO_SALIDA
FROM IV30300 A
WHERE A.ITEMNMBR BETWEEN '01-01-002' AND '01-01-007'
AND A.DOCDATE BETWEEN '2008-12-01' AND '2008-12-15'
AND TRXLOCTN BETWEEN '01' AND '11'
AND DOCNUMBR='TR-08-0001650'
UNION
SELECT DISTINCT A.DOCNUMBR,EXTDCOST,DOCDATE,A.ITEMNMBR,TRXQTY,UNITCOST,TRXLOCTN,TRNSTLOC,A.DEX_ROW_ID,DOCTYPE,
(CASE WHEN TRXQTY>0 AND DOCTYPE <> '3' THEN TRXQTY*QTYBSUOM ELSE 0 END) AS ENTRADA,
(CASE WHEN TRXQTY>0  THEN (TRXQTY*QTYBSUOM)*UNITCOST ELSE 0 END) AS COSTO_ENTRADA,
(CASE WHEN TRXQTY<0 OR DOCTYPE='3' THEN ABS(TRXQTY)*QTYBSUOM ELSE 0 END)AS SALIDA,
(CASE WHEN DOCTYPE='3' THEN (ABS(TRXQTY)*QTYBSUOM)*UNITCOST ELSE 0 END)AS COSTO_SALIDA
FROM IV30300 A
WHERE A.ITEMNMBR BETWEEN '01-01-002' AND '01-01-007'
AND A.DOCDATE BETWEEN '2008-12-01' AND '2008-12-15'
AND TRXLOCTN BETWEEN '01' AND '11'
AND DOCNUMBR='TR-08-0001650'
GROUP BY A.DOCNUMBR,EXTDCOST,DOCDATE,A.ITEMNMBR,TRXQTY,UNITCOST,TRXLOCTN,TRNSTLOC,A.DEX_ROW_ID,DOCTYPE,QTYBSUOM
ORDER BY A.DEX_ROW_ID,DOCDATE