2017-02-20 25 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和別名,而是在客戶端中處理。