Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/05/2011, 12:46
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Select de una tabla autocruzada de Texto

Hola SadlyMistaken:

Lo que quieres hacer se puede obtener utilizando la función GROUP_CONCAT y utilizando subconsultas, así:

Código MySQL:
Ver original
  1. mysql> create table tabla (
  2.     -> id int, nombre varchar(20),
  3.     -> actividad varchar(20), dia_semana varchar(20));
  4. Query OK, 0 rows affected (0.08 sec)
  5.  
  6. mysql> insert into tabla values (1,'jose','karate','lunes'),
  7.     -> (2,'maria','ballet','miercoles'),
  8.     -> (3,'manuel','plastica','viernes'),
  9.     -> (4,'jesus','futbol','lunes'),
  10.     -> (5,'rocio','ballet','lunes'),
  11.     -> (6,'laura','karate','miercoles'),
  12.     -> (7,'sergio','plastica','viernes'),
  13.     -> (8,'jorge','futbol','lunes');
  14. Query OK, 8 rows affected (0.05 sec)
  15. Records: 8  Duplicates: 0  Warnings: 0
  16.  
  17. mysql> select * from tabla;
  18. +------+--------+-----------+------------+
  19. | id   | nombre | actividad | dia_semana |
  20. +------+--------+-----------+------------+
  21. |    1 | jose   | karate    | lunes      |
  22. |    2 | maria  | ballet    | miercoles  |
  23. |    3 | manuel | plastica  | viernes    |
  24. |    4 | jesus  | futbol    | lunes      |
  25. |    5 | rocio  | ballet    | lunes      |
  26. |    6 | laura  | karate    | miercoles  |
  27. |    7 | sergio | plastica  | viernes    |
  28. |    8 | jorge  | futbol    | lunes      |
  29. +------+--------+-----------+------------+
  30. 8 rows in set (0.00 sec)
  31.  
  32. mysql> select distinct actividad,
  33.     -> ifnull((select group_concat(nombre) from tabla T2
  34.     -> where T2.actividad = T1.actividad
  35.     -> and T2.dia_semana = 'lunes'), '') Lunes,
  36.     -> ifnull((select group_concat(nombre) from tabla T2
  37.     -> where T2.actividad = T1.actividad
  38.     -> and T2.dia_semana = 'miercoles'), '') Miercoles,
  39.     -> ifnull((select group_concat(nombre) from tabla T2
  40.     -> where T2.actividad = T1.actividad
  41.     -> and T2.dia_semana = 'viernes'), '') Viernes
  42.     -> from tabla T1;
  43. +-----------+-------------+-----------+---------------+
  44. | actividad | Lunes       | Miercoles | Viernes       |
  45. +-----------+-------------+-----------+---------------+
  46. | karate    | jose        | laura     |               |
  47. | ballet    | rocio       | maria     |               |
  48. | plastica  |             |           | manuel,sergio |
  49. | futbol    | jesus,jorge |           |               |
  50. +-----------+-------------+-----------+---------------+
  51. 4 rows in set (0.02 sec)

Hasta donde recuerdo MySQL no implementa tablas PIVOT, como SQL Server u Oracle (igual y estoy equivocado), sería cuestión de que investigaras algo más acerca de este tema.

Checa esta liga:

http://www.artfulsoftware.com/infotree/queries.php#78

Saludos
Leo.

Última edición por leonardo_josue; 10/05/2011 a las 12:52