将行转换为列SQL Server,T-SQL
问题描述:
我有一个函数可以产生几行作为字符串值。值如下:将行转换为列SQL Server,T-SQL
[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列,依此类推。我会用一个数据透视表,但是这个字符串每次都会改变,这就是我不想使用pivot的原因。这不是一个大学家庭作业的任务,我只想到使用RANK和行号功能。
任何帮助,将不胜感激。
答
您仍然必须使用pivot(或aggregate_function(CASE)手动编码的变体),但是您可以动态执行此操作。创建一个接受逗号分隔的列标题列表的过程,并为varchar变量中的pivot设置sql代码,并在该列表中放置占位符。这使您可以将数据透视表保存在表中,或者将视图定义读入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
对于concatenating many rows into a single text string有一个很好的参考。你可能需要它@PivotedList参数。
我希望我不是完全的标志:-)