Ver Mensaje Individual
  #6 (permalink)  
Antiguo 28/11/2012, 19:14
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: calculo de diferentes gupos en una misma consulta

Cita:
pero lo que yo quiero que me muestre es esto:
id_____matrize_id_____depositos______retiros_____b alance
1________1___________42353_________604______41749
2_________2__________4______________18_______-14
3_________3___________66____________67______-1
4_________3___________14____________28______-15
Perdona, pero si esto es lo que necesitas, te estás complicando innecesariamente:
Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->     `matrices_id`,
  3.     ->     `depositos`,
  4.     ->     `retiros`,
  5.     ->     SUM(`depositos`- `retiros`) balance
  6.     -> FROM `test`.`op_martices`
  7.     -> GROUP BY `matrices_id`;
  8. +-------------+-----------+---------+---------+
  9. | matrices_id | depositos | retiros | balance |
  10. +-------------+-----------+---------+---------+
  11. |           1 |     42353 |     604 |   41749 |
  12. |           2 |         4 |      18 |     -14 |
  13. |           3 |        66 |      67 |     -15 |
  14. +-------------+-----------+---------+---------+
  15. 3 rows in set (0.00 sec)

Las variables de usuario no son necesarias nada más que para obtener una acumulación progresiva, que no es lo que estás buscando.
Ahora bien, si lo que quieres es que sume secuencialmente, mostrando el resumen de subtotales, no es buena idea usar las variables, porque deberías escribirlas con condicionales y necesitarías una o dos más como flags.
Es algo demasiado complicado para iniciarte en este tema.
Lo que sí puedes hacer es usar una clausula adicional:
Código MySQL:
Ver original
  1.     CAST(
  2.         IF( depositos is null
  3.             and retiros is null
  4.             AND matrices_id is null,
  5.             'Total',
  6.             IF(
  7.                 depositos is null
  8.                 and retiros is null, 'Subtotal', matrices_id)) AS CHAR)`matrices_id`,
  9.     CAST(IFNULL(`depositos`, '') AS CHAR) depositos,
  10.     CAST(IFNULL(`retiros`, '') AS CHAR) retiros,
  11.     `balance`
  12.     (SELECT
  13.         `matrices_id`,
  14.         `depositos`,
  15.         `retiros`,
  16.         SUM(`depositos`- `retiros`) balance
  17.     FROM `test`.`op_martices`
  18.     GROUP BY `matrices_id`, `depositos`,`retiros` WITH ROLLUP) T1
  19. WHERE (depositos IS NULL AND retiros IS NULL)
  20.     OR (depositos IS NOT NULL AND retiros IS NOT NULL)
Esto daría:
Código MySQL:
Ver original
  1. +-------------+-----------+---------+---------+
  2. | matrices_id | depositos | retiros | balance |
  3. +-------------+-----------+---------+---------+
  4. | 1           | 42353     | 604     |   41749 |
  5. | Subtotal    |           |         |   41749 |
  6. | 2           | 4         | 18      |     -14 |
  7. | Subtotal    |           |         |     -14 |
  8. | 3           | 14        | 28      |     -14 |
  9. | 3           | 66        | 67      |      -1 |
  10. | Subtotal    |           |         |     -15 |
  11. | Total       |           |         |   41720 |
  12. +-------------+-----------+---------+---------+
  13. 8 rows in set (0.02 sec)

Como verás, no es una solución para nada sencilla, pero es posible.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 28/11/2012 a las 19:39