Buen día, Amigo Libras;
Disculpa la tardanza en responder a ver que tal fue tan factible tu solución, que efectivamente me funcionó también. Y agradecido estoy de ello.
Pero te comento, que la desesperación me hizo encontrar otra posible solución, que me ayudó (puede ser con antigua sentencia o de la vieja escuela
), pero por supuesto, aunque sea lenta la consulta, solo es cuestión de seleccionar de vez en cuando y no algo de rutina.
Te la comparto para que también puedas analizarla y saques conclusión de las diferencias: Muy poco común encontrar estas soluciones a nivel Hispano... O por lo que pude investigar...
Código SQL:
Ver originalDECLARE @T TABLE(
FECHA DATETIME,
COMENTARIO NVARCHAR (MAX),
CUENTA VARCHAR(15),
DEBE NUMERIC(15,2),
HABER NUMERIC(15,2)
)
INSERT INTO @T
SELECT FECHA, COMENTARIO, CUENTA, DEBE, HABER
FROM DIARIOAPUNTES
WHERE FECHA BETWEEN @STARTDATE AND @ENDDATE;
/*
INSERT INTO @T VALUES ('001-0001','20130102',100,0);
INSERT INTO @T VALUES ('001-0001','20130102',0,200);
INSERT INTO @T VALUES ('001-0001','20130102',100,0);
INSERT INTO @T VALUES ('001-0001','20130103',100,0);
INSERT INTO @T VALUES ('001-0001','20130105',0,100);
INSERT INTO @T VALUES ('001-0002','20130105',100,0);
INSERT INTO @T VALUES ('001-0002','20130106',500,0);
*/
--DEBIT - CREDIT + BALANCE
WITH T_ROW AS
(
SELECT (ROW_NUMBER() OVER(ORDER BY (T1_1.FECHA) ASC)) AS CONTADOR, FECHA, T1_1.CUENTA, T1_1.COMENTARIO, T1_1.DEBE, T1_1.HABER
FROM @T T1_1
)
SELECT TOP(100) T1.CONTADOR, T1.CUENTA, T1.COMENTARIO AS DESCRIPCION, CONVERT(CHAR(10), T1.FECHA, 103) AS FECHA, T1.DEBE, T1.HABER, ROUND(T1.DEBE-T1.HABER + COALESCE(T2.SALDO,0),2) AS SALDO
FROM T_ROW T1
CROSS APPLY(
SELECT ROUND(SUM(DEBE)-SUM(HABER),2) AS SALDO
FROM T_ROW T2
WHERE T2.CONTADOR < T1.CONTADOR AND T1.CUENTA = T2.CUENTA
) AS T2
WHERE T1.FECHA BETWEEN @STARTDATE AND @ENDDATE
ORDER BY T1.CUENTA, T1.FECHA
--WHERE T1.ACCOUNTNO = '001-0001'
Reitero el agradecimiento por tu ayuda.
El tema se encuentra solucionado. Lo cerraré cuando lo notes conveniente.
Saludos.