2016-11-28 58 views
0

我有如下一個事實表:如何轉在SQL Server行列

Table Types 

TypeId | Name 
    1  x 
    2  y 
    3  z 

Table Period: 

PeriodId | Date 
1   2014-01-31 
2   2015-01-31 



RowNumber | Value | TypeId | Identifier | PeriodId 
1   12  1   cc1   1 
2   10  2   cc1   2 
3   17  3   cc1   1 
..   30  ...   ...   .. 
..   60  1   cc2  1 
       23  2   cc2  2 

從這些表我想創建如下一個扁平化的表:

Identifier | periodId | x | y | z 
    cc1    1   12  10 17 
    cc1    2   .. .. .. 
    cc2    1   ..  .. .. 

如何我可以查詢以上述格式獲取數據嗎?

+0

我想你可以在這裏找到一些幫助你的問題,[** Dynamic Pivot **](http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query) –

回答

0
INSERT INTO NewTable 
SELECT Identifier, PeriodId, 
    (SELECT Value FROM [Values] v2 WHERE v2.Identifier = v1.Identifier AND v2.PeriodId = v1.PeriodId AND v2.TypeId = 1) AS 'x', 
    (SELECT Value FROM [Values] v2 WHERE v2.Identifier = v1.Identifier AND v2.PeriodId = v1.PeriodId AND v2.TypeId = 2) AS 'y', 
    (SELECT Value FROM [Values] v2 WHERE v2.Identifier = v1.Identifier AND v2.PeriodId = v1.PeriodId AND v2.TypeId = 3) AS 'z' 
FROM [Values] v1 
GROUP BY Identifier, PeriodId 

這是你所需要的?