我具有與輸入參數@Instring的VarChar =「1,2,3,4」,這是動態的輸入運行一個程序,填充表@RetTable這樣:樞軸@Table與動態列動態SQL
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
然後我想通過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這裏。我已經嘗試過Stack上的各種動態sql帖子,但遇到了其他所有嘗試的問題。有任何想法嗎?
編輯:
回答@bluefeet。我所嘗試過的;
1)
Execute
('Select * From @TempTable
Pivot(Max(myReturns) For ID In (' + @InString + ')) As myPTable')
結果:誤差必須聲明@TempTable - 表超出範圍
2)然後改變@TempTable到#TempTable; 打印爲:
Select * From #TempTable
Pivot(Max(myReturns) For ID In (1,2,3)) As myPTable
當執行,我得到錯誤:附近有語法錯誤 '1'
這使我聯想到的ID應該被界定爲[1],[2],[3 ] ..
早些時候,我也嘗試過與正常執行執行,也Exec的sp_executesql的
只要你的第二次嘗試返回一個不正確的語法 - 因爲你的列是數字的,那麼你需要用一個方括號包圍每列(即'[1],[2],[3]') – Taryn