从两个表中创建视图,而一些行成为列

问题描述 投票:2回答:1

嘿,我是新来的SQL和我有我的FPDF显示数据的问题。我有以下这些表:

tbl_students

studentID|fname |mname|lname   |grade  |section      |sy       |teacherid     
14-10546 |Aljhon|C    |Austria |Grade 2|St. Bernadeth|2018-2019|15-11100
12-23534 |Buklaw|K    |Buknoy  |Grade 2|St. Bernadeth|2018-2019|15-11100

tbl_grades

studentID|subjectID  |period        |sy       |final_grade
14-10546 |Science 101|First Grading |2018-2019|79.40       
14-10546 |Science 101|Second Grading|2018-2019|87.91
14-10546 |Science 101|Third Grading |2018-2019|0.00
14-10546 |Science 101|Fourth Grading|2018-2019|0.00
12-23534 |Science 101|First Grading |2018-2019|77.40       
12-23534 |Science 101|Second Grading|2018-2019|98.34        
12-23534 |Science 101|Third Grading |2018-2019|0.00
12-23534 |Science 101|Fourth Grading|2018-2019|0.00

我想创建这样的观点view_all_grades

    studentID|fname |grade  |section      |sy       |FirstGrading|SecondGrading|ThirdGrading|FourthGrading    
    14-10546 |Aljhon|Grade 2|St. Bernadeth|2018-2019|79.40       |87.91        |0.00        |0.00            
    12-23534 |Buklaw|Grade 2|St. Bernadeth|2018-2019|77.40       |98.34        |0.00        |0.00        

用什么我试过到目前为止,我执行命令后收到的一些错误:

#1370 - 拒绝用户legend63'@“localhost”的例行“tbl_grades.max”执行命令

CREATE view view_all_grades AS 
SELECT 
    tbl_students.studentID, 
    tbl_students.fname, 
    tbl_students.grade, 
    tbl_students.section, 
    tbl_students.sy, 
    tbl_grades.max(case when tbl_grades.period = 'First Grading' then tbl_grades.final_grade end) FirstGrading 
FROM 
    tbl_students 
    INNER JOIN tbl_grades ON tbl_students.studentID = tbl_grades.studentID
sql
1个回答
0
投票

在SQL中,在固定的列数枢转数据的通常的方法是使用条件聚合:

CREATE view view_all_grades AS
SELECT
    st.studentID,
    st.fname,
    st.grade,
    st.section,
    st.sy,
    gr.subjectID,
    MAX(CASE WHEN gr.period = 'First Grading'  THEN gr.final_grade END) FirstGrading,
    MAX(CASE WHEN gr.period = 'Second Grading' THEN gr.final_grade END) SecondGrading,
    MAX(CASE WHEN gr.period = 'Third Grading'  THEN gr.final_grade END) ThirdGrading,
    MAX(CASE WHEN gr.period = 'Fourth Grading' THEN gr.final_grade END) FourthGrading
FROM
    tbl_students st
    INNER JOIN tbl_grades gr ON gr.studentID = st.studentID
GROUP BY
    st.studentID,
    st.fname,
    st.grade,
    st.section,
    st.sy,
    gr.subjectID

PS:从看你的样本数据,我开始怀疑,你将需要在视图列subjectID(?否则,当有学生在多学科成绩会发生什么),因此我把它添加到非聚集查询的列。

© www.soinside.com 2019 - 2024. All rights reserved.