Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Agrupar campo con valores de otros campos en misma tabla

Estas en el tema de Agrupar campo con valores de otros campos en misma tabla en el foro de Mysql en Foros del Web. Amigos, buenas noches. Tengo una tabla con los siguientes campos, y con los movimientos que se describen a continuacion: numdoc debitos creditos saldo 1 d-1000 ...
  #1 (permalink)  
Antiguo 27/03/2012, 20:45
 
Fecha de Ingreso: marzo-2012
Mensajes: 53
Antigüedad: 12 años, 1 mes
Puntos: 3
Agrupar campo con valores de otros campos en misma tabla

Amigos, buenas noches.
Tengo una tabla con los siguientes campos, y con los movimientos que se describen a continuacion:

numdoc debitos creditos saldo
1 d-1000
1 c-100
1 c-900
2 d-100
3 d-500
3 c-100
3 c-200

Lo que necesito hacer es extraer el saldo por cada numdoc restando los creditos de los debitos.

Con esta sentencia logro hacerlo presentando el resultado en una columna "dif":
SELECT numdoc,SUM(debe-haber) dif FROM pruebas GROUP BY numdoc ;

Sin embargo lo que pretendo (y no he podido lograr) es actualizar la columna saldo con los valores pendientes agrupados por cada numdoc, debiendo quedar asi:


numdoc saldo
1 0
2 100
3 200

Es algo asi, pero no doy:
UPDATE tabla (SELECT numdoc,SUM(debe) debitos, SUM(haber) creditos FROM tabla) SET saldo = debitos-creditos GROUP BY numdoc;

Pueden ayudarme a crear esta consulta?

Muchas gracias de antemano.

Saludos.

Última edición por falegria230349; 27/03/2012 a las 21:17 Razón: colocacion de columnas
  #2 (permalink)  
Antiguo 28/03/2012, 01:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Agrupar campo con valores de otros campos en misma tabla

No se puede!!!
No puedes leer y escribir al mismo tiempo en la misma tabla.

Ni es necesario.
Siempre los puedes calcular, además siempre debes recalcularlos puesto que no sabes si ha entrado un valor nuevo que los cambie...

Y además guardar valores dependientes es un grave error de diseño.
Ya que se pueden producir situaciones de incoherencia de la bbdd


Tabla
numdoc
d_h
valor


Valores
Código pre:
Ver original
  1. numdoc          d_h        valor
  2. 1                 d          1000
  3. 1                 c           100
  4. 1                 c           900
  5. 2                 d           100
  6. 3                 d           500
  7. 3                 c           100
  8. 3                 c           200


Código MySQL:
Ver original
  1. SELECT numdoc,
  2.              SUM(if(`d_h`="d",valor,0)) as debitos,
  3.              SUM(if(`d_h`="c",valor,0)) as creditos,
  4.              SUM(if(`d_h`="d",valor,0)-if(`d_h`="c",valor,0)) as Saldo
  5. FROM tabla
  6. GROUP BY numdoc ;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 28/03/2012 a las 01:49
  #3 (permalink)  
Antiguo 28/03/2012, 08:05
 
Fecha de Ingreso: marzo-2012
Mensajes: 53
Antigüedad: 12 años, 1 mes
Puntos: 3
Respuesta: Agrupar campo con valores de otros campos en misma tabla

quimfv, gracias por contestar.

Cita:
No se puede!!!
No puedes leer y escribir al mismo tiempo en la misma tabla.
No lo sabia, apenas comencé hace dos meses, pero ya tengo en un 90% terminada la exportacion de un sistema con DBFs a MySql.

Cita:
"Y además guardar valores dependientes es un grave error de diseño."
"Ya que se pueden producir situaciones de incoherencia de la bbdd"
La consulta es solo para mostrar momentaneamente si existe algun documento con saldo. Lo de escribir en la misma tabla era para poder extraer esa informacion y mostrarla en un Browse de mi sistema.

Aprovechoa para preguntar:si ¿es posible crear una tabla directamente del resultado de una consulta?

Gracias.

Saludos cordiales.
  #4 (permalink)  
Antiguo 28/03/2012, 09:01
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Agrupar campo con valores de otros campos en misma tabla

Hola falegria230349:

Cita:
Iniciado por falegria230349 Ver Mensaje
Aprovechoa para preguntar:si ¿es posible crear una tabla directamente del resultado de una consulta?
Si es posible crear tablas a partir de una consulta:

Código SQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. +------+-------------+
  9. 3 ROWS IN SET (0.00 sec)
  10.  
  11. mysql> CREATE TABLE tabla2 AS SELECT * FROM tabla;
  12. Query OK, 3 ROWS affected (0.14 sec)
  13. Records: 3  Duplicates: 0  Warnings: 0
  14.  
  15. mysql> SELECT * FROM tabla2;
  16. +------+-------------+
  17. | id   | descripcion |
  18. +------+-------------+
  19. |    1 | uno         |
  20. |    2 | dos         |
  21. |    3 | tres        |
  22. +------+-------------+
  23. 3 ROWS IN SET (0.00 sec)

En lo particular no recomiendo hacerlo, pues además de estar ocupando espacio adicional, estás duplicando información. En su defecto puedes utilizar vistas o tablas temporales de acuerdo a tus necesidades.

Saludos
Leo.
  #5 (permalink)  
Antiguo 28/03/2012, 09:29
 
Fecha de Ingreso: marzo-2012
Mensajes: 53
Antigüedad: 12 años, 1 mes
Puntos: 3
Respuesta: Agrupar campo con valores de otros campos en misma tabla

leonardo_josue, excelente!, es lo que necesitaba saber. Por supuesto usaré una tabla temporal.
Muchisimas gracias.

Saludos.
  #6 (permalink)  
Antiguo 30/03/2012, 02:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Agrupar campo con valores de otros campos en misma tabla

No necesitas ni una vista ni una tabla temporal para mostrar el resultado de una consulta en el browser.

Obviamente, es mejor que hagas una vista que una tabla duplicando información.

Pero no la necesitas para mostrar el resultado con el browser... usa directamente la consulta.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: agrupar, campos, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:14.