No entiendo lo que quieres decir en tu penúltimo mensaje. ¿Para qué quieres agregar la fecha?
Vamos a ver, si tienes la tabla
caja
Código:
+------------+---------+-------+-------+
|categoria | fecha | debe | haber |
+------------+---------+-------+-------+
|A | 2007 | 100 | 50 |
|B | 2007 | 150 | 200 |
|A | 2007 | 50 | 100 |
|A | 2007 | 10 | 0 |
|C | 2007 | 200 | 50 |
|B | 2008 | 100 | 150 |
|A | 2008 | 50 | 100 |
|A | 2008 | 100 | 200 |
|C | 2008 | 50 | 50 |
|D | 2008 | 100 | 10 |
+------------+---------+-------+-------+
y aplicas la consulta que te puse, obtienes
Código:
+------------+----------------+---------------+--------------+---------------+
|categoria | egreso2007 | ingreso2007 | egreso2008 | ingreso2008 |
+------------+----------------+---------------+--------------+---------------+
|A | 160 | 150 | 150 | 300 |
+------------+----------------+---------------+--------------+---------------+
|B | 150 | 200 | 100 | 150 |
+------------+----------------+---------------+--------------+---------------+
|C | 200 | 50 | 50 | 50 |
+------------+----------------+---------------+--------------+---------------+
|D | 0 | 0 | 100 | 10 |
+------------+----------------+---------------+--------------+---------------+
y, de hecho, con la consulta de gluglu obtienes lo mismo, excepto que en lugar de ceros en los ejercicios en los que no hubo movimiento en alguna categoría, obtienes NULL.
Pero no entiendo entonces cuál es el problema para comparar. Según se entendía de la primera consulta SQL que escribiste, quieres comparar los egresos e ingresos, por categoría, de dos ejercicios distintos. Y eso lo puedes hacer con el tipo de resultado que te muestro: cada renglón es una categoría y puedes ver una columna por ejercicio.
En todo caso, puedes basarte en los datos de ejemplo que pongo para explicar con más detalle lo que buscas.
Bye