旋转SQL Server表

时间:2017-12-11 11:34:40

标签: sql-server tsql

我有一个ULTRALEGACY数据库,由于未知原因(对我而言),参数表的结构如下:

|Parameter1|Parameter2|Parameter3|Parameter4 ...
------------------------------------------------
|  Value1  |  Value2  |  Value3  |  Value4   ...

几十个列和一个值列(是的,对我来说也没有意义)

如何在这些表中查询结果,如

|Parameter|Value |
-----------------
|param1   |value1|
|param2   |value2|
|param3   |value3|
...

我刚设法用

获得第一列
SELECT COLUMN_NAME as Parameter
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='parameter_table_name'

但我无法弄清楚如何获取值列,我想我必须转动表但我不知道该怎么做

2 个答案:

答案 0 :(得分:3)

您需要的是UNPIVOT

我的示例是针对固定数量的列,如果它是变量,则需要使用dynamic sql来获取它们的列表并构造UNPIVOT语句。

declare @t table (p1 int, p2 int, p3 int);
insert into @t values(1, 2, 3);

select param, val
from @t unpivot (val for param in (p1, p2, p3))u;

答案 1 :(得分:2)

我想使用cross apply

select a.* from <table> t
cross apply(
            values ('param1', t.Parameter1),
                   ('param2', t.Parameter2),
                   ('param3', t.Parameter3),
                   ('param4', t.Parameter4)
         ) a(Parameter, Value)

结果:

Parameter   Value
param1      Value1
param2      Value2
param3      Value3
param4      Value4