2015-09-16 66 views
0

請SE我的代碼如下使用UNION ALL SQL查詢來創建動態列名

set @query = 'SELECT tenantcode, locationd, name, MONTH,' + 
'Year1 as' + '[' + @Year1 + ']' + 
',Year2 as' + '[' + @Year2 + ']' + 
',Year3 as' + '[' + @Year3 + ']' + 
',Year4 as' + '[' + @Year4 + ']' + 
',Year5 as' + '[' + @Year5 + ']' + 
'from #SalesPerYear' + 
'UNION ALL' + 
'SELECT tenantcode, locationd, name, total , t1, t2,t3,t4,t5 FROM #TotalSales ' 


EXECUTE (@query) 

這是我在實現SQL最終的輸出,其中列名應該是動態的願望代碼部分(以這種情況下,改變YEAR名稱,如2011,2012,2013年等)

當執行我的存儲過程,有這樣

Msg 102, Level 15, State 1, Line 1 
Incorrect syntax near 'tenantcode'. 

一個錯誤,當我刪除了UNION ALL,既queri es個人工作。這裏可能是什麼問題。

+0

運行此命令「打印@query」的兩側,並張貼在這裏它是什麼返回 –

回答

2

您錯過了from #SalesPerYearUNION ALL之間的空格以及以下SELECT

.... 
'from #SalesPerYear ' 
        ^---here 
'UNION ALL' + 
' SELECT tenantcode, locationd, name, total , t1, t2,t3,t4,t5 FROM #TotalSales ' 
^--- and here 

那證明它的最簡單的方法,當然你也可以只放一個空間UNION ALL

' UNION ALL ' + 
+0

哇!它實際上工作!儘管我發現空間如何破壞整個代碼真的很奇怪。謝謝 – rickyProgrammer

+0

真的嗎?你認爲'如果你想將它輸入到SQL管理工作室中,從myTableUNION選擇x,y,z從myothertable選擇a,b,c看起來像有效的SQL? – Jamiec

+0

YAH!好的,你讓我在那裏!我以爲在UNION和SELECT之前我在代碼上有一個空格。 – rickyProgrammer