2011-06-29 11 views
2

時間の経過とともに個人が縦に表示され、その値をワイドディスプレイに変換したいとします。任意の数のグループ変数を使用して長いデータセットからSQLのワイドデータセットに変換する

family | year | salary 
fam1 | 2002 | 80 
fam1 | 2003 | 82 
fam1 | 2008 | 90 
fam2 | 1996 | 45 
fam3 | 2002 | 70 
fam3 | 2003 | 72 

から

family | salary1996 | salary2002 | salary2003 | salary2008 
fam1 | 45   | .   | .   | . 
fam2 | .   | 80   | 82   | 90 
fam3 | .   | 70   | 72   | . 

に問題は「年」のための可能な値の任意の数が存在することです。

+1

どのようなデータベースですか?動的SQLを使用する必要がある動的な年数。 –

+1

なぜワイドテーブルに変換しますか?あなたがそれを始める方法はあなたの状況に適しています。 – Nik

+0

@Nik私たちは非常に大きな "家族"レベルのデータセットと合併しています。統計ソフトウェアには矩形のデータが必要です。家族レベルのデータからの観測を複製することは、大きすぎて不安定であり、有用なことをすることはありません。 – AdamO

答えて

3

SQL Serverを使用している場合、これはあなたが探しているものです。

更新

以上は、コードは

DECLARE @cols VARCHAR(1000) 
DECLARE @sqlquery VARCHAR(2000) 

SELECT @cols = STUFF((SELECT distinct '], [' + cast([year] as varchar) 
         FROM YourTable FOR XML PATH('')), 1, 2, '') + ']' 


SET @sqlquery = 'SELECT * FROM 
     (SELECT family, [year], [salary] 
     FROM YourTable) base 
     PIVOT (SUM(salary) FOR [year] 
     IN (' + @cols + ')) AS finalpivot' 

EXECUTE (@sqlquery) 
関連する問題