2016-09-11 2 views
2

테이블 tbl_contestant, tbl_criteria 및 tbl_judges가 있습니다. 그리고 나서이 결과를 tbl_score로 합쳐서 1 테이블 더 가져 왔습니다. 내가이 출력을 달성 할 수있는 방법MYSQL/Query : 테이블 행을 열로 만드는 방법

tbl_criteria 
------------------------ 
crit_id | criteria_name 
    16 | sports 

tbl_judges 
------------------------ 
judge_id | judge_name 
    61  | first 
    62  | second 
    63  | third 


tbl_cotestant 
-------------------------------------- 
con_id | contestant_number | contestant_name | 
    1 |   1   |  john  | 
    2 |   2   |  sy  | 
    3 |   3   |  Nah  | 


tbl_score 
-------------------------------------------------- 
score_id | crit_id | judge_id | contestant_number | score 
    1  | 16 | 61 |  1   |  25 
    2  | 16 | 61 |  2   |  25 
    3  | 16 | 61 |  3   |  25 
    4  | 16 | 62 |  1   |  25 
    5  | 16 | 62 |  2   |  73 
    6  | 16 | 62 |  3   |  59 
    7  | 16 | 63 |  1   |  70 
    8  | 16 | 63 |  2   |  80 
    9  | 16 | 63 |  3   |  70 

는 judge_id 행 crit_id

contestant_number | contestant_name | 16_judge_61 | 16_judge_62 | 16_judge_63 | total 
     1   |  john  |  25 |  25  |  70  |  
     2   |  sy  |  25 |  73  |  80  | 
     3   |  Nah  |  25 |  59  |  70  | 

수정하십시오 내 쿼리 당신은이 문제를 해결하는 CASE를 사용할 수

SELECT DISTINCT(c.contestant_number) , contestant_name , j1.sports as 
16_judge_61, j2.sports as 16_judge_62, j3.sports as 16_judge_63 from 
tbl_criteria , tbl_score, tbl_contestant c 
LEFT JOIN tbl_ // <-- i have no idea how start from here joining those 4 tables together 
+0

당신은 프리젠 테이션 계층의 정렬 반대로 당신이 MySQL로 출력하고자 확실 해요? – Strawberry

+1

'일반'SQL 쿼리를 사용하여이 작업을 수행 할 수 없습니다. 근본적으로 열을 '피벗 (pivot)'하는 수단이 필요합니다. 참조 : http://stackoverflow.com/questions/1241178/mysql-rows-to-columns http://sqlfiddle.com/에서 테스트 데이터로 SQL 바이올린을 작성하여 공유 한 경우 이에 대한 도움이 필요할 수 있습니다. –

+0

@ AlanHay 고맙습니다. tbl_score가 이미 구축 되었기 때문에 judge_id 행을 열로 바꿀 수 있기 때문에 이전 질문이 잘못되었다고 생각합니다. –

답변

1

에 따라 컬럼으로 변합니다.

SELECT 
     s.contestant_number, 
     c.contestant_name, 
     SUM(CASE WHEN s.crit_id='16' AND s.judge_id='61' THEN s.score END) as 16_judge_61, 
     SUM(CASE WHEN s.crit_id='16' AND s.judge_id='62' THEN s.score END) as 16_judge_62, 
     SUM(CASE WHEN s.crit_id='16' AND s.judge_id='63' THEN s.score END) as 16_judge_63, 
     SUM(s.score) as Total 
    FROM tbl_score s 
     INNER JOIN tbl_contestant c ON s.contestant_number = c.contestant_number 
     GROUP BY s.contestant_number 

SQL 바이올린을 볼 http://sqlfiddle.com/#!9/9efa5/1

+0

정말 도움이됩니다. –