![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 14.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam mam tabele jak na screenie poniżej, chciałbym zrobić select wyświetlający tabele 4 kolumn, ich zawartość będzie uzależniona od id_przedmiotu a wyświetlane będą dane z kolumny "ocena", czyli w pierwszej kolumnie wyświetlone zostanie 3, 2, 2 w drugiej 5, 3, 5 itd. Jedną kolumnę mogę wyświetlić poprzez
dalej nie mogę ruszyć. (IMG:http://oi43.tinypic.com/30ijc0h.jpg) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
nie bardzo rozumiem
chodzi o SELECT ocena,id_przedmiotu (IMG:style_emoticons/default/questionmark.gif) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 14.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
Nie, zobacz jakie wartości są w kolumnie id_przedmiotu, są 1,2,3,4 - jak id_przedmiotu jest 1 to ocene wpisuje do kolumny nr 1, jeśli 2 to do kolumny nr 2 jeśli 3 to do kolumny 3 itd tak jak poniżej:
Kolumna nr 1: 3 2 2 Kolumna nr 2: 5 3 5 Kolumna nr 3: 2 4 5 Kolumna nr 4: 5 2 4 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 3 Dołączył: 14.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Wydaje mi się, iż w tym przypadku słowem klucz będzie pivot table. http://en.m.wikibooks.org/wiki/MySQL/Pivot_table
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 14.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam po małej przerwie wróciłem do swojego programu, otóż mam taką tabelę:
(IMG:http://i43.tinypic.com/awvldu.png) 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) 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 Daje wynik: (IMG:http://i40.tinypic.com/k9gf0n.png) Chciałbym ż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" czyli zamiast liczb teksty. ******************************************************************** EDIT: Grupowałem po id zamiast po id_ucznia 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 "Biologia", sum(ocena*(1-abs(sign(id_przedmiotu-4)))) as "Historia" from oceny group by id_ucznia Działa, teraz pytanie jak zrobić ten sam efekt ale przy zmianie typu pól "ocena" z int na varchar i wypełnienie tych pól znakami np. "aaa" "bbb" itd? Ten post edytował jajoo 22.05.2013, 21:47:11 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.09.2025 - 11:30 |