Cita:
Empezado por keyboy
Creo que podemos utilizar una consulta menos complicada y más eficiente al no usar tantas subconsultas:
Código SQL [-]
select
categoria,
sum(if(year(fecha)=2007, debe, 0)) as egreso2007,
sum(if(year(fecha)=2007, haber, 0)) as ingreso2007,
sum(if(year(fecha)=2008, debe, 0)) as egreso2008,
sum(if(year(fecha)=2008, haber, 0)) as ingreso2008
from caja
group by categoria
Al final de cuentas, no requerimos enlazar a la tabla parapersonales. Lo único que necesitamos es que nuestro motor acepte algún tipo de condicional. En el ejemplo uso el IF de MySQL.
Bye
|
De todas maneras me encuentro con otro problema, porque la consulta me devolvería ambos resultados agrupados, es decir:
Año 2008---------Año 2007
categoria1 2008 categoria1 2008
categoria2 2008 categoria2 2008
categoria3 2008 categoria3 2008
categoria4 2007 categoria4 2007
y yo solo quiero encolumnar donde hubiese resultado ya que es para hacer una comparación paralela, asi:
Año 2008---------Año 2007
categoria1 2008 categoria1 ----
categoria2 2008 categoria2 ----
categoria3 2008 categoria3 ----
categoria4 ---- categoria4 2007
lo que agrego es la fecha, para poder mostrarla
Código SQL
[-]
select
categoria, fecha,
sum(if(year(fecha)=2007, debe, 0)) as egreso2007,
sum(if(year(fecha)=2007, haber, 0)) as ingreso2007,
sum(if(year(fecha)=2008, debe, 0)) as egreso2008,
sum(if(year(fecha)=2008, haber, 0)) as ingreso2008
from caja
group by categoria
y en cuyo caso en que en ambos años haya resultados, me repetiria la categoria, asi:
Año 2008---------Año 2007
categoria5 2008 categoria5 2008
categoria5 2007 categoria5 2007
lo que me complica la visualización para comparar.