MySQL透视并分配自定义列名称

时间:2017-02-20 22:25:37

标签: mysql sql

我在MySQL中执行查询,就像这样......

select employee_id, sale_date, count(id) 
from sales 
group by employee_id, extract(year_month from sale_date);

数据回来了......

1 1/1/2014 5
1 2/1/2014 6
1 3/1/2014 4
2 1/1/2014 4
2 2/1/2014 10
2 3/1/2014 0
3 1/1/2014 0
3 2/1/2014 0
3 3/1/2014 8

我转动此表格,我想要做的是以下列格式显示

ID    Jan    Feb    Mar
1     5      6      4
2     4      10     0
3     0      0      8

在此表中,我想要的是与月份对应的列名称。如果你在一年中,我希望第一列可以是你所在的月份,而不是Jan.

至于我的问题 - 无论如何可以在同一个SQL语句中动态设置列的名称?由于我已经转动,我可以提取月份名称,我只是错过了实际编写列名称的步骤。

1 个答案:

答案 0 :(得分:2)

没有。在执行SQL SELECT语句时,不能动态修改列名或列别名。

因此,一个产生问题所示结果的查询,使用这些列名,我们需要执行一个如下所示的SQL语句:

SELECT id    AS `ID`
     , expr  AS `Jan`
     , expr  AS `Feb`
  FROM ...

此要求是因为SQL的运行方式。归结为一个非常基本的规则:必须在SQL文本中指定标识符(例如表名,列名,列别名)。

可以动态创建类似上面的语句作为前一步骤。并且可以使用另一个单独的SQL语句来帮助您实现这一点。预处理的目标是生成如上所述的语句,以获得分配的列别名。至于如何做到这一点,StackOverflow已多次询问该问题。

虽然可以动态生成SQL语句,但通常可以在SQL中避免转换和别名,而是在客户端中处理。