2011-06-29 74 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,這是你在找什麼:

更新

仍然假設您正在使用SQL Server 2005或以上,這裏是代碼:

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)