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

[SOLUCIONADO] Valores DISTINCT de un campo como COLUMNAS

Estas en el tema de Valores DISTINCT de un campo como COLUMNAS en el foro de Mysql en Foros del Web. Buenas a todos Tengo una duda con una consulta sobre pedidos de piedras. Muestro el volumen en metros cúbicos de las piedras, pero por cada ...
  #1 (permalink)  
Antiguo 13/12/2013, 05:11
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años
Puntos: 13
Valores DISTINCT de un campo como COLUMNAS

Buenas a todos

Tengo una duda con una consulta sobre pedidos de piedras. Muestro el volumen en metros cúbicos de las piedras, pero por cada tipo de piedra que hay. También lo filtro por años haciendo un YEAR() de la fecha de salida del pedido. El problema es que quiero mostrarlo todo en una sola consulta en vez de una consulta por año, haciendo que cada año sea una columna.

Como en realidad lo hago junto con PHP no me importa indicar manualmente los años, pero el problema es que me repite los registros por cada año, quedando de la siguiente forma:



Me gustaría que saliera cada columna "nom" una sola vez y que cada valor del año en su correspondiente columna.

Os pongo la consulta:
Código MySQL:
Ver original
  1. SELECT t.nom, SUM(b.volum), IF(YEAR(c.dataSortida)=2009, SUM(b.volum), 0) '2009', IF(YEAR(c.dataSortida)=2010, SUM(b.volum), 0) '2010', IF(YEAR(c.dataSortida)=2011, SUM(b.volum), 0) '2011', IF(YEAR(c.dataSortida)=2012, SUM(b.volum), 0) '2012', IF(YEAR(c.dataSortida)=2013, SUM(b.volum), 0) '2013'
  2. FROM (bloc b INNER JOIN tipuspedra t ON b.idTipus=t.id) INNER JOIN albara a ON b.idAlbara=a.id INNER JOIN comanda c ON c.id=a.idComanda
  3. WHERE b.idAlbara IS NOT NULL
  4. GROUP BY b.idTipus, YEAR(c.dataSortida)
  5. ORDER BY t.nom,YEAR(c.dataSortida);

Gracias de antemano

Última edición por gnzsoloyo; 13/12/2013 a las 06:43 Razón: MUY MAL etiquetado. MySQL NO ES PHP.
  #2 (permalink)  
Antiguo 13/12/2013, 06:44
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, 4 meses
Puntos: 2658
Respuesta: Valores DISTINCT de un campo como COLUMNAS

Quitale el YEAR(c.dataSortida) en el GROUP BY...
__________________
¿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 13/12/2013, 08:26
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años
Puntos: 13
Respuesta: Valores DISTINCT de un campo como COLUMNAS

Buenas gnzsoloyo

Agradezco tu respuesta, pero no lo hace bien tampoco. De esa forma me da el sumatorio de uno de los 4 años (el primero que encuentre), y el resto salen a 0.



Saludos
  #4 (permalink)  
Antiguo 13/12/2013, 08:36
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, 4 meses
Puntos: 2658
Respuesta: Valores DISTINCT de un campo como COLUMNAS

Creo que lo estás haciendo mal...
Código MySQL:
Ver original
  1.     t.nom,
  2.     SUM(b.volum) Total,
  3.     SUM(IF(YEAR(c.dataSortida)=2009,  b.volum, 0)) '2009',
  4.     SUM(IF(YEAR(c.dataSortida)=2010, b.volum, 0)) '2010',
  5.     SUM(IF(YEAR(c.dataSortida)=2011, b.volum, 0)) '2011',
  6.     SUM(IF(YEAR(c.dataSortida)=2012, b.volum, 0)) '2012',
  7.     SUM(IF(YEAR(c.dataSortida)=2013, b.volum, 0)) '2013'
  8. FROM bloc b
  9.     INNER JOIN tipuspedra t ON b.idTipus=t.id
  10.     INNER JOIN albara a ON b.idAlbara=a.id
  11.     INNER JOIN comanda c ON c.id=a.idComanda
  12.     b.idAlbara IS NOT NULL
  13.     AND YEAR(c.dataSortida) BETWEEN 2009 AND 2013
  14. GROUP BY b.idTipus
  15. ORDER BY t.nom;
__________________
¿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: campo, columnas, distinct, join, null, php, registro, select
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 20:33.