我有一个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'
但我无法弄清楚如何获取值列,我想我必须转动表但我不知道该怎么做
答案 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