Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 旋转SQL Server表_Sql Server_Tsql - Fatal编程技术网

Sql server 旋转SQL Server表

Sql server 旋转SQL Server表,sql-server,tsql,Sql Server,Tsql,我有一个ULTRALEGACY db,其中,由于未知的原因(对我来说),参数表的结构如下: |Parameter1|Parameter2|Parameter3|Parameter4 ... ------------------------------------------------ | Value1 | Value2 | Value3 | Value4 ... 几十个列和一行值(是的,对我来说也没有意义) 如何查询这些表以获得类似的结果 |Parameter|Value

我有一个ULTRALEGACY db,其中,由于未知的原因(对我来说),参数表的结构如下:

|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'

但是我不知道如何获取值列,我想我必须要透视表,但我不知道如何做

您需要的是
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;

您需要的是
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;

我想使用
交叉应用

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

我想使用
交叉应用

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


尝试PIVOT转换表格有多少列,您认为列的数量会有所不同吗?@DineshDB read last line:)@TimBiegeleisen columns number会随表格的不同而变化(是的,这里有更多的***)我正试图找到一个银弹查询,它适合每一个这样结构的表。您需要unpivot而不是pivotTry PIVOT来转换表有多少列,您是否希望列的数量会有所不同?@DineshDB read last line:)@TimBiegeleisen columns number会因表而异(是的,还有更多的这类***)我正试图找到一个银弹查询,它适合每一个这样结构的表。你需要unpivot而不是pivotnice!我如何处理不同的列类型?我不介意将所有列强制转换为varchari如果至少有两列不同类型的列不能转换为同一类型,你应该将所有列转换为varchar.SQL_VARIANT也是一个选项,但并非所有客户端都能识别它,并且需要额外的努力才能在以后的阶段正确处理它。很好!我如何处理不同的列类型?我不介意将所有列强制转换为varchari如果至少有两个不同类型的列无法转换为同一类型,则应转换所有列umns to varchars.SQL_VARIANT也是一个选项,但并非所有客户端都能识别它,在以后的阶段需要额外的努力才能正确处理它。太好了,我有很多列,每个表的名称都不同,所以我不能全部键入。太好了,我有很多列,每个表的名称都不同,所以我不能全部键入