Hola beimar26:
No recomiendo el uso de cursores a menos que sea absolutamente necesario hacerlo... debido a que tienen un desempeño bastante lento y pueden afectar el rendimiento de la BD, por lo general puedes buscar otra alternativas para obtener el mismo resultado con consultas simples o inclusive con procedimientos almacenados, pero evitando el tema de los cursores, el detalle es que no nos das mucha información acerca de tus tablas o tus datos, por lo que resulta algo complicado darte una respuesta puntual...
Sería mas sencillo si comienzas por explicarnos exactamente qué es lo que necesitas, y que nos expliques tu modelo... aunque pongas la consulta, resulta casi imposible saber qué es lo que hace. Manejas 4 tablas pero no nos dices cuál es la estructura de cada una (los campos que tienen), ni nos dices cómo almacenas la información o cómo están relacionadas unas tablas con otras... tampoco nos muestras cuál es la salida que arroja y qué es lo que quieres obtener como salida...
No somos adivinos (al menos yo no lo soy jejejejeje) pero me gustaría poder ayudarte.
Ahora bien, tratando de simplificar lo que expones con tu problema y enfocándome sólo en la parte de obtener subtotales, creo que un simple ROLLUP te serviría.
http://dev.mysql.com/doc/refman/5.0/...modifiers.html
Código MySQL:
Ver original+------+---------+------------+-------------+
| year | country
| product
| SUM(profit
) | +------+---------+------------+-------------+
| 2000 | Finland | Computer | 1500 |
| 2000 | Finland | Phone | 100 |
| 2000 | India | Calculator | 150 |
| 2000 | India | Computer | 1200 |
| 2000 | USA | Calculator | 75 |
| 2000 | USA | Computer | 1500 |
| 2001 | Finland | Phone | 10 |
| 2001 | USA | Calculator | 50 |
| 2001 | USA | Computer | 2700 |
| 2001 | USA | TV | 250 |
+------+---------+------------+-------------+
+------+---------+------------+-------------+
| year | country
| product
| SUM(profit
) | +------+---------+------------+-------------+
| 2000 | Finland | Computer | 1500 |
| 2000 | Finland | Phone | 100 |
| 2000 | Finland
| NULL | 1600 | | 2000 | India | Calculator | 150 |
| 2000 | India | Computer | 1200 |
| 2000 | India
| NULL | 1350 | | 2000 | USA | Calculator | 75 |
| 2000 | USA | Computer | 1500 |
| 2000 | USA
| NULL | 1575 | | 2001 | Finland | Phone | 10 |
| 2001 | Finland
| NULL | 10 | | 2001 | USA | Calculator | 50 |
| 2001 | USA | Computer | 2700 |
| 2001 | USA | TV | 250 |
| 2001 | USA
| NULL | 3000 | +------+---------+------------+-------------+
si observas el ejemplo, con ROLLUP puedes ir mostrando los subtotales de cada grupo, y al final el gran total. no sé si esto te pueda servir, pero creo que si. puedes manipular esta consulta para que en lugar de NULL coloque las leyendas que tú quieras. Dale un vistazo y si continuas con problemas, trata de explicar un poco mejor tu problema y recuerda que nosotros no conocemos tu modelo, entre más detalles nos puedas dar acerca de esté y de los datos que almacenas, más fácil será tratar de ayudarte.
Saludos
Leo.