Este ejemplo le sirve. Cómo estructurar la relación de caja en Access:
Tiene dos tablas:
TblIngresos
TblEgresos
Ambas deberían tener:
Un campo para el monto
Un campo para el tipo de operación (efectivo o banco)
Un campo de fecha
Quizá una descripción o concepto
Paso 1: Crear consultas independientes de suma por tipo de operación
Primero, haz dos consultas de totales (suma) para cada tabla y solo para las operaciones en efectivo.
Consulta de ingresos en efectivo:
SELECT Sum(TblIngresos.Monto) AS TotalIngresosEfectivo
FROM TblIngresos
WHERE TblIngresos.TipoOperacion = "Efectivo";
Consulta de egresos en efectivo:
SELECT Sum(TblEgresos.Monto) AS TotalEgresosEfectivo
FROM TblEgresos
WHERE TblEgresos.TipoOperacion = "Efectivo";
Paso 2: Crear una consulta de saldo de caja
Ahora, haga una nueva consulta que referencie las dos consultas anteriores o directamente sume desde las tablas como subconsultas. Ejemplo:
SELECT
(SELECT Sum(Monto) FROM TblIngresos WHERE TipoOperacion="Efectivo") AS TotalIngresosEfectivo,
(SELECT Sum(Monto) FROM TblEgresos WHERE TipoOperacion="Efectivo") AS TotalEgresosEfectivo,
[SaldoInicial] +
(SELECT Sum(Monto) FROM TblIngresos WHERE TipoOperacion="Efectivo") -
(SELECT Sum(Monto) FROM TblEgresos WHERE TipoOperacion="Efectivo") AS SaldoFinal
FROM
(SELECT 1000 AS SaldoInicial) -- Puede cambiar 1000 por el valor real de su saldo inicial
;
Así obtiene:
Total ingresos en efectivo
Total egresos en efectivo
Y el saldo final sumando/restando a partir de un saldo inicial
Si lo quieres por fechas:
Puede hacer una consulta agrupada por fecha:
SELECT
Fecha,
Sum(IIf([TipoOperacion]='Efectivo',[Monto],0)) AS TotalEfectivo,
Sum(IIf([TipoOperacion]='Banco',[Monto],0)) AS TotalBanco
FROM TblIngresos
GROUP BY Fecha
UNION ALL
SELECT
Fecha,
-Sum(IIf([TipoOperacion]='Efectivo',[Monto],0)) AS TotalEfectivo,
-Sum(IIf([TipoOperacion]='Banco',[Monto],0)) AS TotalBanco
FROM TblEgresos
GROUP BY Fecha
ORDER BY Fecha;
¿Por quél e salían datos repetidos?
Probablemente intentó hacer una consulta de unión sin unificar bien los criterios, o usó una relación tipo INNER JOIN que cruzaba cada ingreso con cada egreso, generando combinaciones que multiplicaban los resultados. En este caso, no necesita relacionar las tablas directamente, sino sumar por separado y luego combinarlas.
Personalmente no trabajo de esta forma lo hago con 1 sola tabla clasificando por tipo, pero no lo hago con Access sino con PostgreSQL donde hay más posibilidades