table 的复杂 SQL 查询要求以不寻常的方式包含数据

A complex SQL query requirement for a table containing data in unusual way

从 table 中提取信息的情况有点复杂。我不确定最好的方法是什么。

我有两个 table: 学生 student_information

学生

id          name
--          --------
1           shredder
2           Queen

student_infromation

student_id  property    value
----------  --------    -----
1           dept        CS
1           address     DE
1           class       X
2           dept        MS
2           address     DE
2           class       IX

运行:

select * from student
join student_information si on student.id = si.student_id

给我这样的输出:

id          name        student_id  property    value
--          --------    ----------  --------    -----
1           shredder        1       dept        CS
1           shredder        1       address     DE
1           shredder        1       class       X
2           queen           2       dept        MS
2           queen           2       address     DE
2           queen           2       class       IX



select * from student
join student_information si on student.id = si.student_id
where property in ('dept','class')

我只需要部门的信息和每个学生的 Class 信息,但目前 属性 class 和部门列为行。我想用它做专栏。

我们可以这样构建table吗?

id          name        dept        class
--          --------    ----------  ------
1           shredder    cS          X       
1           queen       MS          IX  

您可以连接两个表,然后按学生汇总,使用旋转逻辑得出您想要的属性:

SELECT
    s.id,
    s.name,
    MAX(CASE WHEN si.property = 'dept'  THEN si.value END) AS dept,
    MAX(CASE WHEN si.property = 'class' THEN si.value END) AS class
FROM student s
LEFT JOIN student_information si
    ON s.id = si.student_id
GROUP BY
    s.id,
    s.name;

Demo