2017-04-21 8 views
-2

私は現在、4つの列、project_id、月、予測、実際のテーブルを持っています。SQL行から2行と列へ

各プロジェクトには12行(12か月間)があります。

私はこれを、各レコードが2行(実際と予想)を持ち、月ごとに12の列を持つ場所に変換したいですか?

SQLサーバーでこれを簡単に達成する方法はありますか?または私は実際と予測のための組合を行う必要がありますか?

例のデータ:(申し訳ありませんが、私はここに表形式でこれを置く方法がわからない)

project_id | month | forecast | actual 
111  | jan | 35  | 30 
111  | feb | 36  | 31 
111  | mar | 45  | 3 
.... 

願望結果

project_id | type  | Jan | Feb | Mar .... 
111  | actual | 30 | 31 | 3 
111  | forecast | 35 | 36 | 45 
+4

'PIVOT'演算子を調べます。 – Jerrad

+0

私はあなたがUNPIVOTとPIVOTを行う必要があると思います –

+0

私はピボットについて知っていましたが、私は組合を使用する必要があるかどうかを知りたいだけです。私のように見えます。ありがとう – chungtinhlakho

答えて

2

あなたはすべて以下のようにピボットと組合を使用することができます:

select * from (
    select project_id, month, forecast from #yourproject) s 
    pivot (max(forecast) for month in ([jan],[feb],[mar],[apr],[may],[jun],[jul],[aug],[sep],[oct],[nov],[dec])) p 
Union all 
select * from (
    select project_id, month, actual from #yourproject) s 
    pivot (max(actual) for month in ([jan],[feb],[mar],[apr],[may],[jun],[jul],[aug],[sep],[oct],[nov],[dec])) p 

ご入力テーブル:

create table #yourproject (project_id int, month varchar(3), forecast int, actual int) 

insert into #yourproject (project_id, month, forecast, actual) values 
(111  ,'jan', 35 , 30) 
,(111  ,'feb', 36 , 31) 
,(111  ,'mar', 45 , 3 ) 
--your records continues