我在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语句中动态设置列的名称?由于我已经转动,我可以提取月份名称,我只是错过了实际编写列名称的步骤。
答案 0 :(得分:2)
没有。在执行SQL SELECT语句时,不能动态修改列名或列别名。
因此,一个产生问题所示结果的查询,使用这些列名,我们需要执行一个如下所示的SQL语句:
SELECT id AS `ID`
, expr AS `Jan`
, expr AS `Feb`
FROM ...
此要求是因为SQL的运行方式。归结为一个非常基本的规则:必须在SQL文本中指定标识符(例如表名,列名,列别名)。
可以动态创建类似上面的语句作为前一步骤。并且可以使用另一个单独的SQL语句来帮助您实现这一点。预处理的目标是生成如上所述的语句,以获得分配的列别名。至于如何做到这一点,StackOverflow已多次询问该问题。
虽然可以动态生成SQL语句,但通常可以在SQL中避免转换和别名,而是在客户端中处理。