Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/08/2013, 13:11
1antares1
 
Fecha de Ingreso: marzo-2006
Mensajes: 43
Antigüedad: 18 años, 9 meses
Puntos: 0
Pregunta Problemas con un Extracto: DEBE, HABER y SALDO

Buenas tardes, amigos.

Les comento quien pueda aportar alguna sugerencia o ayuda breve a lo sucedido.
Para ser breve, a la hora de intentar realizar un Extracto contable con el DEBE y HABER, en SALDO contínuo.

Realmente quedé colgado en mi Consulta, y no consigo alguna solución posible para encontrar lo deseado.

Agradecido estaría de alguna pequeña colaboración por algunos de ustedes.

Estoy buscando algo así:

Código SQL:
Ver original
  1. FECHA                 CUENTA  DEBE  HABER      SALDO
  2. 2013-01-01 00:00:00 11200   0.00    1500.00 -1500.00
  3. 2013-01-01 00:00:00 11200   0.00    60.00   -1560.00
  4. 2013-01-01 00:00:00 11200   0.00    400.00  -1960.00
  5. 2013-01-01 00:00:00 11200   0.00    100.00  -2060.00
  6. 2013-01-01 00:00:00 11200   0.00    300.00  -2360.00
  7. 2013-01-01 00:00:00 11200   0.00    250.00  -2910.00
Realmente no requiero filtrarlo por tipo de cuenta esta vez, sino específicas.

La idea es que con mi Query aún no me da dicho resultado.

Pueden comprarlo creando una tabla provisional o temporal, con el mismo mostrado a continuación:

Código SQL:
Ver original
  1. INSERT INTO Accounting (AccDate,DebitCredit,Account,Amount) VALUES ('20110101','D',11200,1500)
  2. INSERT INTO Accounting (AccDate,DebitCredit,Account,Amount) VALUES ('20110101','C',11200,60)
  3. INSERT INTO Accounting (AccDate,DebitCredit,Account,Amount) VALUES ('20110102','D',11200,400)
  4. INSERT INTO Accounting (AccDate,DebitCredit,Account,Amount) VALUES ('20110102','C',11200,100)
  5. INSERT INTO Accounting (AccDate,DebitCredit,Account,Amount) VALUES ('20110102','C',11200,300)
  6. INSERT INTO Accounting (AccDate,DebitCredit,Account,Amount) VALUES ('20110102','C',11200,250)
  7.  
  8. WITH CTE_FIRST AS
  9. (
  10.     SELECT ACCDATE,
  11.         ACCOUNT,
  12.         CASE WHEN DEBITCREDIT='D' THEN AMOUNT ELSE 0 END AS DEBIT,
  13.         CASE WHEN DEBITCREDIT='C' THEN AMOUNT ELSE 0 END AS CREDIT,
  14.         ROW_NUMBER()OVER(ORDER BY ACCOUNT,ACCDATE) RN
  15.     FROM ACCOUNTING
  16.     WHERE ACCDATE >='20130101'
  17.    
  18. )
  19. ,CTE_SECOND AS(
  20.     SELECT *,
  21.           ISNULL((SELECT TOP 1 DEBIT FROM CTE_FIRST B WHERE B.ACCOUNT=A.ACCOUNT AND B.RN<A.RN ORDER BY RN DESC),0) COL1,
  22.           ISNULL((SELECT TOP 1 CREDIT FROM CTE_FIRST B WHERE B.ACCOUNT=A.ACCOUNT AND B.RN<A.RN ORDER BY RN DESC),0) COL2
  23.     FROM CTE_FIRST A
  24. )
  25.  
  26. SELECT ACCDATE,ACCOUNT,DEBIT,CREDIT,
  27.     CASE WHEN DEBIT=0 THEN 0-(CREDIT+COL2) ELSE DEBIT+COL1 END BALANCE
  28. FROM CTE_SECOND

Algo me ocurre en la validación de suma o no me está tomando consultando de forma líneal....

Toda esta consulta, intenté ayudarme con material que conseguí en la web. Pero no me da la respuesta total.

Si además existe otra mejor manera, no habría problema.

Gracias por su atención.

Saludos.
__________________
:si: ANTARES:si: