将单列结果集解析为多列SQL

时间:2014-04-21 14:19:40

标签: sql-server sql-server-2008 while-loop pivot temp-tables

我编写了一个存储过程,它返回一个2列临时表,一个不是唯一的ID列,但是一个介于2和12之间的值来组合值。另一列是实际数据值列。我想将这个1列表分成一个表,基本上是1个11列的表,每个数据集有1列。

enter image description here

我希望通过ID将其解析为列。标识列不是必需的,因为它们对于它们自己的列是唯一的。喜欢的东西;

Data2        Data3        Data4
102692...    103516....   108408....
104114...    103476....   108890....

等等。我曾尝试在数据集中使用While循环,但它主要是将这些包含在1个插入中,这让我很烦恼。我无法弄清楚怎么说

While recordCount > 0
    Begin
        Insert into @tempTable(value1ID2,value1ID3,Value1ID4)
    End

然后遍历value2ID2,value2ID3等。

如果这是不可能的,那么我将不得不找出一个解决方法,但我尝试这样做的主要原因是报表生成器数据集的折线图最终将共享一个日期分组。

1 个答案:

答案 0 :(得分:1)

由于您需要聚合字符串值,因此您需要使用maxmin聚合函数。问题是它将为每列返回一行。要重新运行多行,您需要使用row_number()之类的窗口函数为每个id / string组合生成唯一值。这将允许您为每个id返回多行:

select Data2 = [2], Data3 = [3], Data4 = [4]
from
(
    select id, stringvalue,
        row_number() over(partition by id order by stringvalue) seq
    from yourtable
) d
pivot
(
    max(stringvalue)
    for id in ([2], [3], [4])
) piv