2017-02-20 23 views
0

我在MySQL像这样执行查询...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 

在该表显示,我要的是对应于M列名onth。如果你是在一年中,但是我希望第一列是你所在的月份,而不是一月。

至于我的问题 - 是否有可能设置列的名称动态地在同一个SQL语句中?因为我已经把它转换了,所以我可以提取月份名称,我只是错过了实际编写列名称的步骤。

+0

你能向我们展示减去缺失步骤的一切吗? – Strawberry

回答

2

不可以。在执行SQL SELECT语句时不能动态修改列名称或列别名。

因此产生的问题所示的结果,与列名的查询,我们将需要执行,看起来像这样的SQL语句:因为如何SQL操作

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

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

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

尽管可以获取动态生成的SQL语句,但通常可以避免在SQL中使用pivoting和别名,而是在客户端中处理。