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

unir registros en mysql

Estas en el tema de unir registros en mysql en el foro de Mysql en Foros del Web. Hola. Sabríais como construir una consulta para que pasase de esto: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original Tabla: Stock ID           ...
  #1 (permalink)  
Antiguo 06/02/2015, 04:52
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
unir registros en mysql

Hola. Sabríais como construir una consulta para que pasase de esto:

Código HTML:
Ver original
  1. Tabla: Stock
  2. ID           ID_Proveedor           ID_Articulo        Cantidad
  3. 1             1                             1                       200
  4. 1             2                             1                       300

a esto:

Código HTML:
Ver original
  1. Tabla: Stock
  2. ID           ID_Proveedor           ID_Proveedor     ID_Articulo           Cantidad
  3. --            1                              2                       1                          500

Gracias de antemano!
  #2 (permalink)  
Antiguo 06/02/2015, 05:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: unir registros en mysql

Es un tema de manual básico.
Lo que describes es una consulta de resumen, más exactamente una suma agrupada, algo que puedes ver en cualquier tutorial.

¿Cómo es la consulta que intentaste hacer? Supongo que habrás hecho alguna...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/02/2015, 06:01
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: unir registros en mysql

Pero la suma agrupada igualmente crea 1 registro por cada proveedor.

Tengo esta consulta:

Código MySQL:
Ver original
  1. ID_Articulo, sum(cantidad) AS cantidad,
  2. (select sum(cantidad) from stock where ID_Proveedor = 1 ) as Proveedor1,
  3. (select sum(cantidad) from stock where ID_Proveedor = 2 ) as Proveedor2,
  4. from stock
  5. group by ID_Articulo

Esto funciona, pero tengo que cambiar el sql por cada nuevo proveedor que tenga.
Si se añaden 3000 proveedores por dia, pues modificar ese sql a mano es una locura.

Hay alguna forma más automática?



Edito:
perdon, lo que pregunté está mal. Quiero conseguir esto:

Código HTML:
Ver original
  1. Tabla: Stock
  2. ID           ID_Proveedor_1          ID_Proveedor_2    ID_Articulo           Cantidad
  3. --            200                            300                      1                          500
  #4 (permalink)  
Antiguo 06/02/2015, 06:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: unir registros en mysql

Vamos a hacertélo más simple...
La consulta que corresponde usar en tu contexto es esta:
Código MySQL:
Ver original
  1. ID_Articulo, , ID_Proveedor, SUM(cantidad) cantidad
  2. FROM stock
  3. GROUP BY ID_Articulo, ID_Proveedor;

Esto otro:
Código SQL:
Ver original
  1. Tabla: Stock
  2. ID           ID_Proveedor_1          ID_Proveedor_2    ID_Articulo           Cantidad
  3. --            200                            300                      1                          500
Es lo que se denomina "reporte consolidado", y no se hace con una consulta de SQL, sino con aplicativos programados, ya sea que los programes tu, o que uses un paquete de terceros. Pero no se hace con consultas.
Además, la consulta que planteas es totalmente ineficiente, porque hace un subselect por cada proveedor y por cada articulo encontrado. Es un espanto de performance.

Existen herramientas en SQL que realizan parte de la tarea de consolidación de datos, como es el caso de los cubos OLAP, y algunos DBMS tienen buenas herramientas para crearlos, pero no son SQL estándar, y no son iguales en todos los DBMS.
Para tu caso, te sugiero usar programación (no es tan difícil, yo lo he hecho muchas veces).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 06/02/2015, 06:48
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: unir registros en mysql

Entendido.
Por programación no es problema, pero si fuera posible hacerlo por SQL directamente pues mejor.
Lo haré como dices.

Gracias.
  #6 (permalink)  
Antiguo 06/02/2015, 07:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: unir registros en mysql

Cita:
Por programación no es problema, pero si fuera posible hacerlo por SQL directamente pues mejor.
Ya te dije: No se puede. No es SQL.

Lo que suelen existir son herramientas propias de cada DBMS (Oracle, MySQL, DB2, SQL Server) que hacen ese tipo de cosas, pero no son SQL puro, y usualmente existen como parte del paquete empresarial.
Puedes encontrar ese tipo de herramientas en algún Open Source que tal vez te sirvan.
Usa Google.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: registros, 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 13:39.