将行转换为具有未知元素数的列

时间:2010-07-06 14:58:24

标签: sql-server

我想要实现这个目标:

初始表:

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。我希望它是动态的。

有可能吗?

2 个答案:

答案 0 :(得分:0)

简而言之,您不能将PIVOT命令用于未知列。

您唯一的选择是使用动态SQL或某种前端来检索数据并重新格式化。

答案 1 :(得分:0)

如果您事先构建了数据透视图,则可以使用动态列进行透视。

SELECT  @listColYouwantInPivot= STUFF(( SELECT distinct  '], [' + [columnName]
                           FROM     tableName
                         FOR
                           XML PATH('')
                         ), 1, 2, '') + ']'

只需在枢轴语句中插入@listColYouwantInPivot,然后再连接。