大家好,阅读本文

经过一段时间的搜索,我意识到我需要的是数据透视表。但是,它必须是动态的。在where子句中,我将配置stitution_id,每个机构都是托儿所/小学/中学,因此这意味着列名将随着年龄的变化而变化。 (我必须将年龄和性别合并在一起)

这是我使用的SQL查询。

SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF("2018-08-31", date_of_birth)), "%Y")+0 AS `Age`, class.name AS `Name`,
CASE
    WHEN gender_id = '1'
           THEN 'M'
           ELSE 'F'
    END as Gender

from security_users AS `su`
INNER JOIN institution_class_students AS `cs`
ON su.id = cs.student_id

INNER JOIN institution_classes AS `class`
ON cs.institution_class_id = class.id

WHERE cs.institution_id = 538

ORDER BY Name


下面是运行上述查询后一个类的一些示例输出。

Age Name      Gender
3   Form 1-1    M
4   Form 1-1    F
4   Form 1-1    F
3   Form 1-1    F
3   Form 1-1    F
4   Form 1-1    M
4   Form 1-1    M
4   Form 1-1    F
5   Form 1-1    F
4   Form 1-1    F
3   Form 1-1    F
3   Form 1-1    F
3   Form 1-1    M
3   Form 1-1    M
4   Form 1-1    F
4   Form 1-1    F
5   Form 1-1    F
5   Form 1-1    F
4   Form 1-1    M
4   Form 1-1    M


根据上面的输出,结果就是我的样子。如果我要为一个有年长学生的学校而奔波,那将是11-M,11-F,12-M,12-F等。

Class     3-M  3-F  4-M 4-F 5-M 5-F
Form 1-1   3    4    4   6   0   3


以下是我要去某机构工作时的样子

Class    3-M  3-F  4-M  4-F 5-M 5-F
Form 1-2  5    6    3    2   0   1
Form 1-3  4    2    7    5   0   0
Form 2    0    0    4    1   7   1
Form 3    0    0    0    0   8   9


这可能吗?我已经阅读了许多数据透视表教程,但是很难理解如何做。任何人都可以对此有所了解。感谢每一个帮助!希望以上细节易于理解。

最佳答案

请参阅http://mysql.rjweb.org/doc.php/pivot-它包含(并说明)一个存储过程,该存储过程查看表以构建必要的数据透视查询。然后执行它。存储的proc的CALL提供6个参数,这比大多数人需要的灵活性更大。

关于mysql - 带有动态列名的数据透视表MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49065830/

10-09 20:11