2

GROUP_CONTACTの使用に構文上の問題があります。

次のようなSQLステートメントを使用します。

SELECT 

     s.school_code
    , s.school_name
    ,st.subject
    ,sg.subgroup
    ,GROUP_CONCAT(IF(r.year=2012,a.proficiency_index,NULL)) AS pi_2012
    ,GROUP_CONCAT(IF(r.year=2013,a.proficiency_index,NULL)) AS pi_2013

FROM 
    ayp_data a
        INNER JOIN 
            report_year r ON
                a.report_year_id = r.id
        INNER JOIN
            school s ON
                a.school_code_id = s.id
        INNER JOIN
            sub_group sg ON
                a.subgroup_id = sg.id
        INNER JOIN
            `subject` st ON
                a.subject_id = st.id

GROUP BY
      report_year_id,
      s.school_code
    , s.school_name
    ,st.subject
    ,sg.subgroup
HAVING 
s.school_name = 'Moody Elementary School' AND 
`subject` = 'Mathematics' AND 
`subgroup` = 'All Students'

私は次のような結果を得ています:

SCHOOL_CODE     SCHOOL_NAME     SUBJECT     SUBGROUP    PI_2012     PI_2013
0065    Moody Elementary School     Mathematics     All Students    9.640000343322754   (null)
0065    Moody Elementary School     Mathematics     All Students    (null)  10.920000076293945

2つの行を1つにマージし、null以外のフィールド値PI_2012とPI_2013を同じ行に配置したいと思います。

GROUP_CONTACTでそれができると思いまし。しかし、私が思っていたようには機能していません。

GROUP_CONCATを使用してこれらのフィールドをマージするにはどうすればよいですか?

または、これを行うためのさらに賢い方法はありますか?

私は完全なスキーマを持っており、SQLFiddleでクエリを実行します

4

1 に答える 1

1

別々の年を別々の行に表示したくない場合はreport_year_idGROUP BY句から削除する必要があります。つまり、これを変更する必要があります。

GROUP BY
      report_year_id,
      s.school_code
    , s.school_name
    ,st.subject
    ,sg.subgroup

これに:

GROUP BY
      s.school_code
    , s.school_name
    ,st.subject
    ,sg.subgroup
于 2012-09-24T18:37:31.843 に答える