2013-05-30 2 views
0

결과 :그래서 내가 3 개 테이블이

student 
-studentid 
-studentname 

course_offerings 
-course_offeringid 
-course 
-type 

scores 
-student_studentid 
-course_offering_course_offeringid 
-score 

내 쿼리를 수행 할 때 :

SELECT studentid, studentname, course, type, score 
FROM scores 
INNER JOIN student ON scores.student_studentid = student.studentid 
INNER JOIN course_offering ON scores.course_offering_course_offeringid = course_offering.course_offeringid 

내가 좋아하는 뭔가의 출력을 얻을 :

studentid studentname  course type score 
123345  Doe, John  123  Exam 1 100 
123345  Doe, John  123  Exam 2 95 
123345  Doe, John  123  Exam 3 75 
123345  Doe, John  123  Final 93 
543211  Doe, Jane  123  Exam 1 70 
543211  Doe, Jane  123  Exam 2 91 
543211  Doe, Jane  123  Exam 3 99 
543211  Doe, Jane  123  Final 43 
. 
. 
. 

을 내가 것 출력은 다음과 같습니다.

studentid studentname  course Exam 1 Exam 2 Exam 3 Final 
123345  Doe, John  123  100  95  75  93 
543211  Doe, Jane  123  70  91  99  43 

이것은 MySQL에서만 가능합니까?

+0

나는 그것이 가능할 것이라고 생각한다. 그것이 당신이 가지고있는 완벽한 테이블 구조인가? course_offering과 score table 모두에서 당신이 studentid를 잃어 버렸다고 생각합니다. – mCube

+0

나는 학생의 점수가'점수 '에 있다고 생각하고'공물'표에 학생증이있을 이유가 없다. – kirelagin

+0

네, 맞습니다. 미안합니다. 나는 또한 당신이 "유형"필드를 제거하고 "점수"테이블에 배치하는 것이 좋습니다. – mCube

답변

0

시험의 양을 하드 코딩하지 않아도됩니다. 학생들을 데리고 3 가지 시험에 참여할 수 있으며 first id < secondid < thirdid에서 복식이 중단되지 않도록해야합니다.

추가 시험이 필요하거나 누군가 2 회의 시험 만받는 경우 처리해야합니다. 3 (또는 그 이상) 조인을 하드 코딩하지 않고도 이런 종류의 피벗을 수행 할 수 없습니다.

0

글쎄, SQL은 이것을 허용하지 않으므로 응용 프로그램에서이 처리를 수행하는 것이 좋습니다. 당신이 정말이 MySQL의에서이 작업을 수행하려면

이 약간 일반 SQL보다 더 강력 stored routines을 사용할 수 있습니다 (예를 들어, 당신은 FOR-loop을 사용할 수 있습니다).