2017-02-20 3 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。あなたが今年の真ん中にいたら、1月ではなく1月であることを第1列にしたいと思っています。

私の質問については、どうにかして列の名前を設定することは可能でしょうか同じSQL文の中で動的に?私はそれをピボットしたので、私は月の名前を抽出することができます、私はちょうど列の名前を実際に記述するステップがありません。

+0

不足しているステップを除いたものをすべて表示できますか? – Strawberry

答えて

2

いいえ。列名または列エイリアスは、SQL SELECT文の実行中に動的に変更することはできません。

そこで問題に示す結果を生成するクエリは、それらの列名で、我々は次のようになりますSQL文を実行する必要があります:

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

この要件があるため、SQLがどのように動作するかであります。かなり基本的なルールになっています。識別子(例:テーブル名、列名、列別名)は、SQLテキストに指定する必要があります。

前の手順として、上記のような文を動的に作成することができます。また、別のSQL文を使用して、そのようにすることもできます。前段階の目標は、上記のようなステートメントを生成して、列エイリアスを割り当てることです。限り、それを行う方法については、その質問はStackOverflowで複数回尋ねられています。

動的に生成されたSQL文を取得することは可能ですが、頻繁にSQLでピボットとエイリアシングを回避し、代わりにクライアントで処理できます。

関連する問題