2017-08-09 4 views
0

外部キーを使用して異なる値で1つの列を水平方向に選択したかったのですが、別のテーブル名gradingperiod_idからのこの外部キー参照。外部キーを使用して異なる値を持つ1つの列を取得する

first | second 
    80  81 

学年:

grade_id | grade | gradingperiod_id 
    1   80   7001 
    2   81   7002 

gradeperiod_mt:

gradeperiod_id | period 
    7001   1 
    7002   2 

student_grade:私はこのようなクエリを実行しようとしたが、これらは同じ値で縦に私に複数の行を与える

student_grade_id | student_id | grade_id 
     1   20140540  1 
     2   20140540  2 

。あなたが何をしようとして

first | second 
    80  80 
    81  81 

SELECT 1st.grade AS first, 2nd.grade as second FROM student_grade sg 
INNER JOIN grade 1st ON 1st.grade_id = sg.grade_id 
INNER JOIN grade 2nd ON 2nd.grade_id = sg.grade_id 

WHERE sg.student_id = 20140540 

GROUP BY 1st.grade, 2nd.grade; 

答えて

1

は、多くのソリューションのためのMySQL pivot tableを参照して、ピボットです。

SELECT MAX(IF(g.grade_id = 1, g.grade, 0)) AS first, 
     MAX(IF(g.grade_id = 2, g.grade, 0)) AS second 
FROM grades AS g 
JOIN student_grade as sg ON sg.grade_id = g.grade_id 
WHERE sg.student_id = 20140540 

これだけを返す1行目以降ORDER BYのための必要はありません。

DEMO

+0

笑。私はピボットテーブルを作成しようとしていることを忘れていました。 'MAX'メソッドがトリックをしました。 :) – Francisunoxx

関連する問題