我想要实现这个目标:
初始表:
PARM1 |PARM2 |DATE
-------------------
VALUE1|VALUE2|DATE1
VALUE3|VALUE4|DATE2
最终结果:
PARM |DATE1 |DATE2 |...
-----------------------
PARM1|VALUE1|VALUE3|...
PARM2|VALUE2|VALUE4|...
简单地说,我想将我的参数名称转换为行,并为每个日期都有一列,其中单元格包含日期和参数的参数值。
到目前为止,我设法得到了这个:
SELECT *
FROM
(
SELECT [Parameter], [DATE], VALUE
FROM
(
SELECT PARM1, PARM2 FROM PARAMETER_VALUES
) SOURCE_TABLE
UNPIVOT
(
VALOR FOR [Parameter] IN (PARM1, PARM2)
) UNPIVOTED_TABLE
) T
问题是,我现在无法对结果进行PIVOT,因为我不知道有多少个DATE。我希望它是动态的。
有可能吗?
答案 0 :(得分:0)
简而言之,您不能将PIVOT
命令用于未知列。
您唯一的选择是使用动态SQL或某种前端来检索数据并重新格式化。
答案 1 :(得分:0)
如果您事先构建了数据透视图,则可以使用动态列进行透视。
SELECT @listColYouwantInPivot= STUFF(( SELECT distinct '], [' + [columnName]
FROM tableName
FOR
XML PATH('')
), 1, 2, '') + ']'
只需在枢轴语句中插入@listColYouwantInPivot,然后再连接。