如何在递归存储过程中使用数据透视

Posted

技术标签:

【中文标题】如何在递归存储过程中使用数据透视【英文标题】:How to use pivot in a recursive stored procedure 【发布时间】:2012-12-15 14:11:06 【问题描述】:

我根据spaces 分隔varchar(我知道空格数)

我正在使用stored procedure (Recursive) 这样做

Alter procedure [dbo].[1234]
   @name varchar(100),
   @count int 
AS 
BEGIN 

    if @count=1
    begin
        set @name=SUBSTRING(@name,CHARINDEX(' ',@name,1)+1,LEN(@name))
        select @name
    end
    if @count>1
    begin
        select SUBSTRING(@name,1,CHARINDEX(' ',@name,1)-1)
        set @count=@count-1
        set @name=SUBSTRING(@name,CHARINDEX(' ',@name,1)+1,LEN(@name))
        exec [dbo].[1234] @name,@count
    end
END

我在

上执行下面的SP
exec [dbo].[1234] 'a b c d e f g h',8

我的结果是

但我希望我的结果为

【问题讨论】:

等一下,我的房间里有一个旋转屏幕... @RoyiNamir:你很幸运。 :) 【参考方案1】:
Alter procedure [dbo].[1234]
   @name varchar(100)
as   
Select @name='Select' + ''''+Replace(@name,' ',''',''')+''''
EXEC( @name)

GO

[1234] 'A b c d e f'

这是SQL Fiddle demo。

【讨论】:

哇,简单又巧妙!

以上是关于如何在递归存储过程中使用数据透视的主要内容,如果未能解决你的问题,请参考以下文章

动态透视查询查看/存储过程?

使用存储过程透视表

使用存储过程的结果加入表

SQLServer(子查询,存储过程,透视,索引)

将数据透视结果附加(插入)到现有 SQL 表中

SQL,While循环,递归存储过程或游标中哪个更快?