
Chcę zrobić analogicznie do tego: (źródło: http://en.m.wikibooks.org/wiki/MySQL/Pivot_table)
Cytat
mysql> select * from exams;
+------+------+------+-------+
| pkey | name | exam | score |
+------+------+------+-------+
| 1 | Bob | 1 | 75 |
| 2 | Bob | 2 | 77 |
| 3 | Bob | 3 | 78 |
| 4 | Bob | 4 | 80 |
| 5 | Sue | 1 | 90 |
| 6 | Sue | 2 | 97 |
| 7 | Sue | 3 | 98 |
| 8 | Sue | 4 | 99 |
+------+------+------+-------+
8 rows in set (0.00 sec)
mysql> select name,
sum(score*(1-abs(sign(exam-1)))) as exam1,
sum(score*(1-abs(sign(exam-2)))) as exam2,
sum(score*(1-abs(sign(exam-3)))) as exam3,
sum(score*(1-abs(sign(exam-4)))) as exam4
from exams group by name;
+------+-------+-------+-------+-------+
| name | exam1 | exam2 | exam3 | exam4 |
+------+-------+-------+-------+-------+
| Bob | 75 | 77 | 78 | 80 |
| Sue | 90 | 97 | 98 | 99 |
+------+-------+-------+-------+-------+
2 rows in set (0.00 sec)
+------+------+------+-------+
| pkey | name | exam | score |
+------+------+------+-------+
| 1 | Bob | 1 | 75 |
| 2 | Bob | 2 | 77 |
| 3 | Bob | 3 | 78 |
| 4 | Bob | 4 | 80 |
| 5 | Sue | 1 | 90 |
| 6 | Sue | 2 | 97 |
| 7 | Sue | 3 | 98 |
| 8 | Sue | 4 | 99 |
+------+------+------+-------+
8 rows in set (0.00 sec)
mysql> select name,
sum(score*(1-abs(sign(exam-1)))) as exam1,
sum(score*(1-abs(sign(exam-2)))) as exam2,
sum(score*(1-abs(sign(exam-3)))) as exam3,
sum(score*(1-abs(sign(exam-4)))) as exam4
from exams group by name;
+------+-------+-------+-------+-------+
| name | exam1 | exam2 | exam3 | exam4 |
+------+-------+-------+-------+-------+
| Bob | 75 | 77 | 78 | 80 |
| Sue | 90 | 97 | 98 | 99 |
+------+-------+-------+-------+-------+
2 rows in set (0.00 sec)
u mnie score to "ocena" a exam to "id_przedmiotu". Zatem mój kod:
Cytat
select
sum(ocena*(1-abs(sign(id_przedmiotu-1)))) as "Język polski",
sum(ocena*(1-abs(sign(id_przedmiotu-2)))) as "Matematyka",
sum(ocena*(1-abs(sign(id_przedmiotu-3)))) as "Historia",
sum(ocena*(1-abs(sign(id_przedmiotu-4)))) as "Informatyka"
from oceny group by id
sum(ocena*(1-abs(sign(id_przedmiotu-1)))) as "Język polski",
sum(ocena*(1-abs(sign(id_przedmiotu-2)))) as "Matematyka",
sum(ocena*(1-abs(sign(id_przedmiotu-3)))) as "Historia",
sum(ocena*(1-abs(sign(id_przedmiotu-4)))) as "Informatyka"
from oceny group by id
Daje wynik:

Jak widać wyświetla mi inaczej niż w przykładzie wyżej. Chciałbym też, żeby pola "ocena" były jako varchar, teraz są int, i chciałbym w ten sam sposób wyświetlić tabelę jak w przykładzie wyżej, tylko z tekstem typu "3, 4, 5, 3, 1, 5, 2" zamiast liczb typu int.