0

我有一个函数可以生成几行作为字符串值。值如下:

[12*02]
[12*03]
[12*04]
[12*05]
[12*06]
[12*07]
[12*08]
[12*09]
[12*10]
[12*11]
[12*12]
[12*13]
[12*14]
[12*15]

这些值实际上是不同的行。所以 [12*01] 是第 1 行,[12*02] 是第 2 行,依此类推。我想将这些值用作列标题。所以 [12*01] 是第 1 列,[12*02] 是第 2 列,依此类推。我会使用枢轴,但这个字符串每次都会不断变化,这就是我不想使用枢轴的原因。这不是大学的家庭作业,我只是想到了使用 RANK 和行号功能。

任何帮助,将不胜感激。

4

1 回答 1

1

您仍然必须使用 pivot (或 aggregate_function (CASE ) 手动编码变体),但您可以动态地执行此操作。创建一个接受逗号分隔的列标题列表的过程,并准备 sql 代码以在 varchar 变量中放置一个占位符,以便在列表应有的位置进行透视。这允许您将数据透视代码保存在表中,或将视图定义读入 varchar 变量以帮助您进行语法检查。之后用实际列表替换占位符并执行数据透视。

create proc ExecPivot (@PivotedList nvarchar(max))
as
   set nocount on

   declare @sql nvarchar(max)
   set @sql = N'
       select ColumnList, [PLACEHOLDER]
       from TableA
       pivot 
       (
          min(Value)
          for Key in ([PLACEHOLDER])
       ) a'
   set @sql = REPLACE(@sql, '[PLACEHOLDER]', @PivotedList)
   print @sql
   exec sp_executesql @sql

有一个很好的参考,可以将多行连接成一个文本字符串。@PivotedList 参数可能需要它。

我希望我不完全符合标准:-)

于 2012-03-21T22:05:29.157 回答