大家好,阅读本文
经过一段时间的搜索,我意识到我需要的是数据透视表。但是,它必须是动态的。在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/