Ver Mensaje Individual
  #3 (permalink)  
Antiguo 31/07/2012, 05:33
pcid
Usuario no validado
 
Fecha de Ingreso: abril-2008
Mensajes: 50
Antigüedad: 16 años
Puntos: 16
Respuesta: Agrupar columnas con ORDER BY sin perder registros ocultos, interesante!!

Muy interesante ese "WITH_ROLLUP" que mencionó gnzsoloyo. No tenía ni idea de que eso existiese.

En fin.

Creo entender mejor el problema que plantea lordofsol. Usualmente me ha tocado resolverlo a nivel de programación al momento de mostrar los resultados en una aplicación para usuarios finales, o para una página web antes de generar el HTML que muestra el resultado, pero nunca desde el "select".

A partir de los datos publicados, me he montado una tabla de pruebas y he escrito un query para conseguir lo que pretende lordofsol. O al menos eso creo.

Código MySQL:
Ver original
  1. CREATE TABLE  fdw_example1 (
  2.   Id_Alumno int(10) NOT NULL,
  3.   Nombre varchar(255) DEFAULT '',
  4.   Periodo int(10) NOT NULL,
  5.   Title varchar(30) NOT NULL,
  6.   Grde tinyint NOT NULL,
  7.   Programa varchar(60) NOT NULL,
  8.   PRIMARY KEY (Id_ITEM)
  9.  
  10. insert into fdw_example1 (Id_Alumno, Nombre, Periodo, Title, Grde, Programa) values
  11. (232323, 'Miguel Soler', 20060, 'Algebra', 7, 'ing. en Sistemas'),
  12. (232323, 'Miguel Soler', 20060, 'Español', 8, 'ing. en Sistemas'),
  13. (232323, 'Miguel Soler', 20040, 'Etica', 10, 'ing. en Sistemas'),
  14.  
  15. (343434, 'Pedro Perez', 20060, 'Algebra', 6, 'ing. en Sistemas'),
  16. (343434, 'Pedro Perez', 20060, 'Español', 8, 'ing. en Sistemas'),
  17. (343434, 'Pedro Perez', 20040, 'Etica', 9, 'ing. en Sistemas'),
  18.  
  19. (454545, 'Oscar Lopez', 20060, 'Algebra', 10, 'ing. en Sistemas'),
  20. (454545, 'Oscar Lopez', 20060, 'Español', 9, 'ing. en Sistemas'),
  21. (454545, 'Oscar Lopez', 20040, 'Etica', 10, 'ing. en Sistemas'),
  22.  
  23. (787878, 'Lupe Meza', 20060, 'Admin', 10, 'Admon de Empresas'),
  24. (787878, 'Lupe Meza', 20060, 'Español', 9, 'Admon de Empresas'),
  25. (787878, 'Lupe Meza', 20020, 'Etica II', 10, 'Admon de Empresas');
  26.  
  27.  
  28. SELECT  case a.Title when x.Min_Title then  a.Id_Alumno else '' end as Id_Alumno,
  29.         case a.Title when x.Min_Title then  a.Nombre else '' end as Nombre,
  30.         a.Title,
  31.         a.Grde
  32. FROM fdw_example1 a
  33. inner join (  select Id_Alumno, min(Title) as Min_Title
  34.               from fdw_example1
  35.               where Periodo = '20060' and Programa = 'ing. en Sistemas'
  36.               group by Id_Alumno
  37.           ) as x on x.Id_Alumno = a.Id_Alumno
  38. WHERE a.periodo = '20060' AND a.programa = 'ing. en Sistemas'
  39. order by a.Nombre, a.Title;

Resultado:

Código SQL:
Ver original
  1. +-----------+---------------+-------+-------+    
  2. |Id_Alumno  |Nombre         |Title  |Grde   |
  3. +-----------+---------------+-------+-------+
  4. |232323     |Miguel Soler   |Algebra|7      |
  5. +-----------+---------------+-------+-------+
  6. |           |               |Español|8      |
  7. +-----------+---------------+-------+-------+
  8. |454545     |Oscar Lopez    |Algebra|10     |
  9. +-----------+---------------+-------+-------+
  10. |           |               |Español|9      |
  11. +-----------+---------------+-------+-------+
  12. |343434     |Pedro Perez    |Algebra|6      |
  13. +-----------+---------------+-------+-------+
  14. |           |               |Español|8      |
  15. +-----------+---------------+-------+-------+



[(Que alguien me explique como poner una "tablita" en un mensaje del foro porque no he encontrado como hacer que el resultado se vea decentemente).

Gracias a gnzsoloyo por responder a esta duda de "la tablita".]


Cuenta si era esto lo que querías.

Saludos,

PCID.

PD:
Una nota más:
Con SQL, "poder hacer" no implica salvar la barrera de "no se debe hacer".

Última edición por pcid; 31/07/2012 a las 09:26