2014-05-20 2 views
0

나는 하나의 울부 짖는 소리와 같은 테이블이 있습니다MySQL의 피벗 취급 값

+------+------+------+-------+ 
| pkey | name | exam | score | 
+------+------+------+-------+ 
| 1 | Bob | Math| 75 | 
| 2 | Bob | Eng | 77 | 
| 3 | Bob | Phy | 78 | 
| 4 | Sue | Math| 80 | 
| 5 | Sue | Eng | 90 | 
| 6 | Sue | Phy | 97 | 
| 7 | Suzy | Math| 98 | 
| 8 | Suzy | Eng | 99 | 
| 9 | Suzy | Phy | 99 | 
+------+------+------+-------+ 

을 그리고 난로를 피벗 쿼리를 만들고 싶어 :

+------+------+------+-------+ 
| Name | Math | Phy | Eng | 
+------+------+------+-------+ 
| Bob | 75 | 78 | 77 | 
| Sue | 80 | 97 | 90 | 
| Suzy| 90 | 99 | 99 | 
+------+------+------+-------+ 

문제 인의 규율을 시험은 500 가지의 다른 값을 가질 수 있으며, 결국 변경 될 수있는 것처럼 모두 정의 할 수는 없으며 대신 600 가지의 값을 가질 수 있습니다.

시험 값을 읽고 값을 표시 할 새 열을 만드는 쿼리를 만들 수 있습니까? 그들은 시험의 값에 HIST을 추가하고 수 지는 100을 가지고 말할 예를 들어

말, 그것은 다음과 같이 될 것이다 : 사전에

+------+------+------+-------+-----+ 
| Name | Math | Phy | Eng | Hist| 
+------+------+------+-------+-----+ 
| Bob | 75 | 78 | 77 |  | 
| Sue | 80 | 97 | 90 |  | 
| Suzy| 90 | 99 | 99 | 100 | 
+------+------+------+-------+-----+ 

감사

답변

1

SQL 쿼리는을 가지고있다 잘 정의 된 컬럼 세트. prepare 문과 동적 SQL을 사용하여 원하는 것을 할 수 있습니다.

또 다른 방법은 가능한 값의 문자열 (예 : Math:75, Phy78, Eng:77)을 만드는 것입니다. 작동하는 경우 :

select name, group_concat(exam, ':', score separator ', ') 
from table t 
group by name;