【发布时间】:2014-03-26 08:05:34
【问题描述】:
我有一个使用动态输入参数@Instring VarChar = '1,2,3,4' 的过程。这个过程会像这样填充@RetTable:
myDates myReturns ID
2012-05-02 0.020 1
2012-05-03 -0.017 1
2012-05-04 -0.026 1
2012-05-02 0.009 2
2012-05-03 0.004 2
2012-05-04 -0.003 2
2012-05-02 -0.003 3
2012-05-03 -0.005 3
2012-05-04 -0.003 3
2012-05-02 0.004 4
2012-05-03 0.010 4
2012-05-04 -0.021 4
然后我想将@RetTable 旋转或转置ID 列,如下所示:
myDates 1 2 3 4
2012-05-02 0.020 0.009 -0.003 0.004
2012-05-03 -0.017 0.004 -0.005 0.010
2012-05-04 -0.026 -0.003 -0.003 -0.021
这是我到目前为止的代码:
Select * From @ReturnsTable
Pivot(Max(myReturns) For [ID] In ([1],[2],[3],[4])) As myPTable
这部分代码:
([1],[2],[3],[4]))
我想用/引用@InString 来替换/引用,以便有一个动态过程。我在 SO 上尝试了各种动态 sql 帖子,但每次尝试都遇到问题。有什么想法吗?
编辑:
回复@bluefeet。我尝试过的;
1)
Execute
('Select * From @TempTable
Pivot(Max(myReturns) For ID In (' + @InString + ')) As myPTable')
结果:error must declare @TempTable - table out of scope
2) 然后把@TempTable改成#TempTable;
打印为:
Select * From #TempTable
Pivot(Max(myReturns) For ID In (1,2,3)) As myPTable
执行时出现错误:Incorrect syntax near '1'
这让我认为ID 应该被分隔为[1],[2],[3]..
之前我也尝试使用普通的execute 执行,但也尝试使用Exec sp_executesql 执行
【问题讨论】:
-
第二次尝试返回错误的语法 - 因为您的列是数字,所以您需要用方括号括住每一列(即
[1], [2], [3])
标签: sql sql-server