代码之家  ›  专栏  ›  技术社区  ›  Ricardo Peres

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

  •  -1
  • Ricardo Peres  · 技术社区  · 14 年前

    我正在努力实现这一目标:

    初始表:

    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
    

    问题是,我现在无法透视结果,因为我不知道有多少日期。我希望它是动态的。

    有可能吗?

    2 回复  |  直到 14 年前
        1
  •  0
  •   cjk    14 年前

    简而言之,您不能使用 PIVOT 具有未知列的命令。

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

        2
  •  0
  •   jfrobishow    14 年前

    如果您在手之前构建透视,则可以使用动态列进行透视。

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

    只需在pivot语句中插入@listcolyouwantinpivot,然后进行连接。