covertir campo a columna
Publicado por diego (1 intervención) el 24/03/2011 02:22:53
Necesito realizar una consulta y q me muestre de la siguiente forma.
Tengo la tabla (instrumentos___2)
mysql> select * from instrumentos__2
-> ;
+-------+------+-------------+
|N_preg | Nota | Id_clase_FK |
+-------+------+-------------+
| 1 | 7 | 8704 |
| 2 | 7 | 8704 |
| 3 | 7 | 8704 |
| 4 | 7 | 8704 |
| 5 | 7 | 8704 |
| 6 | 7 | 8704 |
| 7 | 7 | 8704 |
| 8 | 7 | 8704 |
| 1 | 3 | 5330 |
| 2 | 3 | 5330 |
| 3 | 3 | 5330 |
| 4 | 3 | 5330 |
| 5 | 3 | 5330 |
| 6 | 3 | 5330 |
| 7 | 3 | 5330 |
| 8 | 3 | 5330 |
| 1 | 12 | 5323 |
| 2 | 12 | 5323 |
| 3 | 12 | 5323 |
| 4 | 12 | 5323 |
| 5 | 12 | 5323 |
| 6 | 12 | 5323 |
| 7 | 12 | 5323 |
| 8 | 12 | 5323 |
| 1 | 3 | 5330 |
| 2 | 3 | 5330 |
| 3 | 3 | 5330 |
| 4 | 3 | 5330 |
| 5 | 3 | 5330 |
| 6 | 3 | 5330 |
| 7 | 3 | 5330 |
| 8 | 3 | 5330 |
| 1 | 12 | 6177 |
| 2 | 12 | 6177 |
| 3 | 12 | 6177 |
| 4 | 12 | 6177 |
| 5 | 12 | 6177 |
| 6 | 12 | 6177 |
| 7 | 12 | 6177 |
| 8 | 12 | 6177 |
+-------+------+-------------+
Necesito q al realizar la consulta salga asi
+-------------+------+------+------+------+------+
| Id_clase_FK | P1 | p2 | p3 | p4 | p5 |...p8
+-------------+------+------+------+------+------+
| 5323 | 12 | 12 | 12 | 12 | 12 |
| 5330 | 6 | 6 | 6 | 6 | 6 |
| 6177 | 12 | 12 | 12 | 12 | 12 |
| 8704 | 7 | 7 | 7 | 7 | 7 |
+-------------+------+------+------+------+------+
esa consulta la logre asi:
mysql> select Id_clase_FK,
-> sum(if(N_preg=1,Nota,Null)) as P1,
-> sum(if(N_preg=2,Nota,Null)) as p2,
-> sum(if(N_pregg=3,Nota,Null)) as p3,
-> sum(if(N_pre=4,Nota,Null)) as p4,
-> sum(if(N_preg=5,Nota,Null)) as p5
-> from instrumentos__2
-> group by Id_clase_FK;
pero necesito alguna forma de no crear tantos IF ya q tengo una tabla que tien 58 preguntas, y me tocaria hacer 58 IF, si hay alguna forma ya sea con while u otra forma les agradesco.
Gracias
Tengo la tabla (instrumentos___2)
mysql> select * from instrumentos__2
-> ;
+-------+------+-------------+
|N_preg | Nota | Id_clase_FK |
+-------+------+-------------+
| 1 | 7 | 8704 |
| 2 | 7 | 8704 |
| 3 | 7 | 8704 |
| 4 | 7 | 8704 |
| 5 | 7 | 8704 |
| 6 | 7 | 8704 |
| 7 | 7 | 8704 |
| 8 | 7 | 8704 |
| 1 | 3 | 5330 |
| 2 | 3 | 5330 |
| 3 | 3 | 5330 |
| 4 | 3 | 5330 |
| 5 | 3 | 5330 |
| 6 | 3 | 5330 |
| 7 | 3 | 5330 |
| 8 | 3 | 5330 |
| 1 | 12 | 5323 |
| 2 | 12 | 5323 |
| 3 | 12 | 5323 |
| 4 | 12 | 5323 |
| 5 | 12 | 5323 |
| 6 | 12 | 5323 |
| 7 | 12 | 5323 |
| 8 | 12 | 5323 |
| 1 | 3 | 5330 |
| 2 | 3 | 5330 |
| 3 | 3 | 5330 |
| 4 | 3 | 5330 |
| 5 | 3 | 5330 |
| 6 | 3 | 5330 |
| 7 | 3 | 5330 |
| 8 | 3 | 5330 |
| 1 | 12 | 6177 |
| 2 | 12 | 6177 |
| 3 | 12 | 6177 |
| 4 | 12 | 6177 |
| 5 | 12 | 6177 |
| 6 | 12 | 6177 |
| 7 | 12 | 6177 |
| 8 | 12 | 6177 |
+-------+------+-------------+
Necesito q al realizar la consulta salga asi
+-------------+------+------+------+------+------+
| Id_clase_FK | P1 | p2 | p3 | p4 | p5 |...p8
+-------------+------+------+------+------+------+
| 5323 | 12 | 12 | 12 | 12 | 12 |
| 5330 | 6 | 6 | 6 | 6 | 6 |
| 6177 | 12 | 12 | 12 | 12 | 12 |
| 8704 | 7 | 7 | 7 | 7 | 7 |
+-------------+------+------+------+------+------+
esa consulta la logre asi:
mysql> select Id_clase_FK,
-> sum(if(N_preg=1,Nota,Null)) as P1,
-> sum(if(N_preg=2,Nota,Null)) as p2,
-> sum(if(N_pregg=3,Nota,Null)) as p3,
-> sum(if(N_pre=4,Nota,Null)) as p4,
-> sum(if(N_preg=5,Nota,Null)) as p5
-> from instrumentos__2
-> group by Id_clase_FK;
pero necesito alguna forma de no crear tantos IF ya q tengo una tabla que tien 58 preguntas, y me tocaria hacer 58 IF, si hay alguna forma ya sea con while u otra forma les agradesco.
Gracias
Valora esta pregunta


0