2015-10-13 54 views
0

我有一个表具有以下(非常简单的)数据:PIVOT/UNPIVOT多个行和列

ID Value1 Value2 Value3 
----------------------------- 
1 5  7  Test 
2 4  7  Test2 

我想每个列名和行该列中的值;所以,我期望的输出应该是这样的:

Column  1  2 
---------------------------- 
Value1  5  4 
Value2  7  7 
Value3  Test  Test2 

我一直在玩透视和逆透视,但不能完全弄清楚。任何帮助,将不胜感激。

SQLFiddle here

+0

你有多少价值列? –

+0

@vkp:假设三个列出。一旦我有一个简单的示例工作,我可以使用动态sql扩展任意数量的列。 – zimdanen

回答

2

对于我来说,想到什么是union all有条件聚集:

select 'Value1', 
     max(case when id = 1 then value1 end) as [1], 
     max(case when id = 2 then value1 end) as [2] 
from t 
union all 
select 'Value2', 
     max(case when id = 1 then value2 end) as [1], 
     max(case when id = 2 then value2 end) as [2] 
from t 
select 'Value3', 
     max(case when id = 1 then value3 end) as [1], 
     max(case when id = 2 then value3 end) as [2] 
from t; 

我认为你可以pivot/unpivot做到这一点,但我认为这是简单的。

+0

我在想同样的..但假设'id'列可能有很多值,在这种情况下,这会有点麻烦 –

+0

谢谢!这是我需要的。 – zimdanen