2010-07-06 27 views
-1

我试图实现这一目标:转换行到列未知号码元素

初始表:

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现在的结果,因为我不知道有多少日期有。我希望它是动态的。

可能吗?

+0

听起来像一个EAV结构,它已经在后面咬你。基本上,数据库不是为了动态生成列而设计的。所以,如果这是你想要做的,你应该在中间层组件或报告工具的数据库之外进行。 – Thomas 2010-07-06 15:02:22

+0

如果您发布代码,XML或固定表格结构,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮(101 010),以良好地格式化和语法突出显示它! – 2010-07-06 15:06:21

回答

0

总之,您不能使用带有未知列的PIVOT命令。

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

0

如果您事先构建枢轴,则可以使用动态列进行透视。

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

只需在pivot语句中插入@listColYouwantInPivot,然后再进行串联。