Select (Select sum(Ingresos.Importe) as Importe From Ingresos
Where strftime("%Y", Ingresos.Realizado) = "2020"
And Ingresos.Cuenta = "Banco X")-(Select sum(Gastos.Importe) as Importe From Gastos
Where strftime("%Y", Gastos.Realizado) = "2020"
And Gastos.Cuenta = "Banco X") as Total;
CREATE VIEW `ingreso` AS SELECT
Cuenta,
total(Importe) As Ingreso
FROM Ingresos
GROUP BY Cuenta
;
CREATE VIEW `gasto` AS SELECT
Cuenta,
total(Importe) As Gasto
FROM Gastos
GROUP BY Cuenta
;
(06-08-2020, 13:44)tincho escribió: Hola, si querés sumar todos los ingresos t1 y restarlo a todos los gastos t2 podrías usar algo como esto.
Estas sentencias agrupan los gastos por cuenta y los ingresos, también por cuenta. luego haces una tercera sentencias para las restas y ya tenes el balance por cuenta.Código:CREATE VIEW `ingreso` AS SELECT
Cuenta,
total(Importe) As Ingreso
FROM Ingresos
GROUP BY Cuenta
;
CREATE VIEW `gasto` AS SELECT
Cuenta,
total(Importe) As Gasto
FROM Gastos
GROUP BY Cuenta
;
también se puede hacer sin segregar por cuenta y obtenés el total de gastos y de ingresos.
Saludos.
Select printf('%.2f',(Sum(Ingresos.Importe)-Sum(Gastos.Importe))) as Importe
From Ingresos inner join Gastos on Ingresos.Cuenta = Gastos.Cuenta
Where Ingresos.Cuenta = "Banco X"
And Ingresos.Realizado <> ""
And strftime('%Y',Ingresos.Realizado)='2020';
CREATE VIEW `totals` AS SELECT
Cuenta,
total(ingreso.ingreso - gasto.gasto) as balance
from Cuentas
LEFT JOIN ingreso ON Cuentas.Cuenta = ingreso.Cuenta
LEFT JOIN gasto ON Cuentas.Cuenta = gasto.Cuenta
ORDER BY Cuentas.Cuenta;
(07-08-2020, 11:25)tincho escribió: Gambafeliz: Hagamos algo mejor, subí un pequeño archivo sqlite con datos simulados que permitan hacer la consulta. Luego hago en este la consulta y lo devuelvo.
También se puede poner la consulta usando el icono de código geshi indicando SQL
Esto es un consejo que te doy para que obtengas mejores resultados, pero de todas mneras te dejo un ejemplo de como seria la tercera consulta.
Saludos.Código:CREATE VIEW `totals` AS SELECT
Cuenta,
total(ingreso.ingreso - gasto.gasto) as balance
from Cuentas
LEFT JOIN ingreso ON Cuentas.Cuenta = ingreso.Cuenta
LEFT JOIN gasto ON Cuentas.Cuenta = gasto.Cuenta
ORDER BY Cuentas.Cuenta;
(08-08-2020, 18:26)jguardon escribió: gambafeliz, intenta preparar un pequeño ejemplo que funcione hasta donde alcances, si puede ser que cree automáticamente las bases de datos y las llene con datos ficticios. Luego pasa el proyecto por aquí como adjunto para poderlo examinar. Yo no soy muy bueno con bases de datos, pero al menos podría identificar algún fallo en el proceso o en las consultas.
(08-08-2020, 18:26)jguardon escribió: Por cierto, lo de columna ambigua significa que en la consulta no has escrito un cualificador para distinguir a qué columna con nombre duplicado en las dos tablas te refieres. Si tienes un campo "total" en ambas tablas, cuando haces operaciones tipo join o union, etc, necesitas cualificar con el nombre de tabla delante y un punto para cada campo, si no, hay ambigüedad y el sistema no sable a qué tabla te refieres. Por ejemplo, ingresos.total o gastos.total o Cuentas.Cuenta en tu caso concreto.
(08-08-2020, 18:26)jguardon escribió: Por otro lado, estoy casi seguro de que nadie utiliza el gestor de bases de datos de gambas, yo al menos no lo veo muy "indicado".
(08-08-2020, 18:26)jguardon escribió: Mi consejo es que piques código a mano por dos motivos, uno es que tienes el control absoluto de lo que haces sin terceras partes y segundo, que así es como mejor se aprende a manejar BDs.
(08-08-2020, 20:29)gambafeliz escribió: piques código a mano
(08-08-2020, 21:24)jguardon escribió:(08-08-2020, 20:29)gambafeliz escribió: piques código a mano
Picar código es escribirlo, teclearlo, programar en definitiva. En contra de usar un gestor que haga operaciones sin escribir código, eso es más o menos lo que trataba de explicar.
Con respecto a los códigos publicados en el hilo, no tengo la menor idea de dónde provienen, si son ejemplos reales o son supuestos, sin ver la estructura real de las bases de datos es difícil evaluar el asunto. Pero en SQL podrás hacer eso y más, aunque sqlite tiene menos prestaciones que MySQL o Postgres, creo que es más que suficiente para lo que quieres.
(08-08-2020, 21:24)jguardon escribió: Lástima que no tengamos por aquí al gurú de las bases de datos, nuestro querido shordi...
Saludos