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 originalFECHA CUENTA DEBE HABER SALDO
2013-01-01 00:00:00 11200 0.00 1500.00 -1500.00
2013-01-01 00:00:00 11200 0.00 60.00 -1560.00
2013-01-01 00:00:00 11200 0.00 400.00 -1960.00
2013-01-01 00:00:00 11200 0.00 100.00 -2060.00
2013-01-01 00:00:00 11200 0.00 300.00 -2360.00
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 originalINSERT INTO Accounting (AccDate,DebitCredit,Account,Amount) VALUES ('20110101','D',11200,1500)
INSERT INTO Accounting (AccDate,DebitCredit,Account,Amount) VALUES ('20110101','C',11200,60)
INSERT INTO Accounting (AccDate,DebitCredit,Account,Amount) VALUES ('20110102','D',11200,400)
INSERT INTO Accounting (AccDate,DebitCredit,Account,Amount) VALUES ('20110102','C',11200,100)
INSERT INTO Accounting (AccDate,DebitCredit,Account,Amount) VALUES ('20110102','C',11200,300)
INSERT INTO Accounting (AccDate,DebitCredit,Account,Amount) VALUES ('20110102','C',11200,250)
WITH CTE_FIRST AS
(
SELECT ACCDATE,
ACCOUNT,
CASE WHEN DEBITCREDIT='D' THEN AMOUNT ELSE 0 END AS DEBIT,
CASE WHEN DEBITCREDIT='C' THEN AMOUNT ELSE 0 END AS CREDIT,
ROW_NUMBER()OVER(ORDER BY ACCOUNT,ACCDATE) RN
FROM ACCOUNTING
WHERE ACCDATE >='20130101'
)
,CTE_SECOND AS(
SELECT *,
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,
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
FROM CTE_FIRST A
)
SELECT ACCDATE,ACCOUNT,DEBIT,CREDIT,
CASE WHEN DEBIT=0 THEN 0-(CREDIT+COL2) ELSE DEBIT+COL1 END BALANCE
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.