PIVOT/UNPIVOT 多行多列
Posted
技术标签:
【中文标题】PIVOT/UNPIVOT 多行多列【英文标题】:PIVOT/UNPIVOT multiple rows and columns 【发布时间】:2015-10-13 20:52:10 【问题描述】:我有一个包含以下(非常简化的)数据的表格:
ID Value1 Value2 Value3
-----------------------------
1 5 7 Test
2 4 7 Test2
我想获取每一列的名称和该列的行中的值;所以,我想要的输出应该是这样的:
Column 1 2
----------------------------
Value1 5 4
Value2 7 7
Value3 Test Test2
我一直在玩 PIVOT 和 UNPIVOT,但不太明白。任何帮助将不胜感激。
SQLFiddle here.
【问题讨论】:
你一共有多少个值列? @vkp:假设列出了三个。一旦我有了一个简单的示例,我可以使用动态 sql 将它扩展为任意数量的列。 【参考方案1】:对我来说,想到的是带有条件聚合的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
来做到这一点,但我认为这更简单。
【讨论】:
我也是这么想的..但假设id
列可能有很多值,在这种情况下,这会有点麻烦
谢谢!这就是我需要的。以上是关于PIVOT/UNPIVOT 多行多列的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2008 中的 PIVOT / UNPIVOT
将矩阵转换为 3 列表('reverse pivot'、'unpivot'、'flatten'、'normalize')
将矩阵转换为 3 列表('reverse pivot'、'unpivot'、'flatten'、'normalize')