2016-04-25 11 views
0

私はこのようになりますcsvファイルからインポートされたデータを持っている:SQLピボットは - 列に最初の行を変換しようと

name year field_a field_b 
----------------------------------------------- 
xyz 2006 123  111.1 
xyz 2007 999  123.4 
xyz 2015 222  456.7 
... 
abc 2006 444  999.9 
abc 2007 555  888.8 
abc 2015 890  789.0 

私は」:私はこのように見える必要があり

Name  Field  Year01  Year02 ... Year10 
----------------------------------------------- 
name  fieldname 2006  2007 ... 2015 
xyz  field_a 123  999  222 
xyz  field_b 111.1  123.4  456.7 
abc  field_a 444  555  890 
abc  field_b 999.9  888.8  789.0 

Pivot命令を使ってこれを行う方法はありますが、動作させることはできません。どうすればこれを達成できますか?

答えて

1

PIVOTa UNPIVOTテーブル。手順:年によって

  1. 名前の変更表の列
  2. UNPIVOTフィールドによって
  3. PIVOT

コンプリートクエリ:

WITH T1 AS 
    (
     SELECT * 
     FROM (VALUES 
      ('name', 'fieldname', 2006, 2007, 2015), 
      ('xyz', 'field_a', 123 ,999 ,222 ), 
      ('xyz', 'field_b', 111.1,123.4,456.7), 
      ('abc', 'field_a', 444 ,555 ,890 ), 
      ('abc', 'field_b', 999.9,888.8,789.0) 
     ) AS T(Name,  Field,  Year01,  Year02, Year10) 
    ) 
    SELECT * 
    FROM 
    (
     SELECT Name AS name, Field AS fieldname, Year01 AS [2006], Year02 AS [2007], Year10 AS [2015] 
     FROM T1 
     WHERE Name <> 'name' 
    ) AS T2 
    UNPIVOT 
    (
     [value] FOR [year] in ([2006], [2007], [2015]) 
    ) AS UP 
    PIVOT 
    (
     MIN(value) FOR fieldname in (field_a, field_b) 
    ) AS P 
    ORDER BY name desc, [year] 
関連する問題