Mysql SQL-使用基于月的列和基于年的行创建自定义表

Mysql SQL-使用基于月的列和基于年的行创建自定义表,mysql,sql,customcolumn,Mysql,Sql,Customcolumn,我正在尝试制作一个很棒的自定义表格,统计行数并组织它们,这样,如果有三行日期在2013年1月,四行日期在2014年3月,五行日期在2014年10月,该表格将显示为: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2013 3 0 0 0 0 0 0 0 0 0 0 0 2014 0 0 4 0 0 0 0 0 0 5 0 0 我建议使用视图,而不是

我正在尝试制作一个很棒的自定义表格,统计行数并组织它们,这样,如果有三行日期在2013年1月,四行日期在2014年3月,五行日期在2014年10月,该表格将显示为:

     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2013 3   0   0   0   0   0   0   0   0   0   0   0
2014 0   0   4   0   0   0   0   0   0   5   0   0

我建议使用视图,而不是新表,这样,当基础数据发生更改时,新表不会不同步

由于您没有给出太多的示例数据,我不得不假设一个结构,但您可能需要这样的内容:

CREATE TABLE T (`Date` DATETIME);
INSERT T (`Date`)
VALUES 
    ('2013-01-01'), ('2013-01-02'), ('2013-01-03'), 
    ('2014-03-01'), ('2014-03-02'), ('2014-03-03'),
    ('2014-10-01'), ('2014-10-01'), ('2014-10-01'),
    ('2014-10-01'), ('2014-10-01');

CREATE VIEW V
AS
    SELECT  YEAR(`Date`) AS `Year`,
            COUNT(CASE WHEN MONTH(`Date`) = 1 THEN 1 END) AS `Jan`,
            COUNT(CASE WHEN MONTH(`Date`) = 2 THEN 1 END) AS `Feb`,
            COUNT(CASE WHEN MONTH(`Date`) = 3 THEN 1 END) AS `Mar`,
            COUNT(CASE WHEN MONTH(`Date`) = 4 THEN 1 END) AS `Apr`,
            COUNT(CASE WHEN MONTH(`Date`) = 5 THEN 1 END) AS `May`,
            COUNT(CASE WHEN MONTH(`Date`) = 6 THEN 1 END) AS `Jun`,
            COUNT(CASE WHEN MONTH(`Date`) = 7 THEN 1 END) AS `Jul`,
            COUNT(CASE WHEN MONTH(`Date`) = 8 THEN 1 END) AS `Aug`,
            COUNT(CASE WHEN MONTH(`Date`) = 9 THEN 1 END) AS `Sep`,
            COUNT(CASE WHEN MONTH(`Date`) = 10 THEN 1 END) AS `Oct`,
            COUNT(CASE WHEN MONTH(`Date`) = 11 THEN 1 END) AS `Nov`,
            COUNT(CASE WHEN MONTH(`Date`) = 12 THEN 1 END) AS `Dec`
    FROM    T
    GROUP BY YEAR(`Date`);

我不知道您想要实现什么,但我怀疑表格设计是否是最佳实践。我不确定是否会显示0条记录的月份。我会使用sum(case etc然后1 else 0 end)而不是count。@DanBracuk它没有区别(检查小提琴,它的显示与问题中的显示完全相同),这两种方法的工作原理完全相同,只是个人喜好。我个人认为当你想要一个
COUNT
时使用
COUNT
,当你想要一个SUM时使用
SUM
更有意义。有关
COUNT(CASE…
vs SUM(CASE…)的更多信息,请原谅我的无知,但请你解释一下这是如何工作的,因为我很高兴你创建了一次视图,您只需参考它,它将始终位于您建议的布局中。如果您发布实际的表结构,我可以尝试将其从一个通用示例修改为更适合您需要的内容。