2014-04-10 73 views
0

請你能幫我把這個腳本放到臨時表中。我一直在這個小時工作,它不斷給我錯誤。PIVOT和TEMP TABLE

DECLARE @PivotColumnHeaders VARCHAR(MAX) 
    SELECT @PivotColumnHeaders = 
    COALESCE(@PivotColumnHeaders + ',[' + CAST(expansion as varchar(max)) + ']', 
    '[' + CAST(expansio 

    n as varchar(max))+ ']') 

INTO #temp 
FROM (Select distinct expansion from #CD4_VL2) results 


DECLARE @PivotTableSQL NVARCHAR(MAX) 
SET @PivotTableSQL = N' 
select * from 
(
select subjectID,expansion,printableValue1 
from #CD4_VL2) as results 


PIVOT 

(MAX([printableValue1]) 
FOR [expansion] IN (
' + @PivotColumnHeaders + ' 
) 
) as PivotTable 

--order by Performed_Date_And_Time desc 
' 

Execute(@PivotTableSQL) 
+2

什麼錯誤?如果是關於語法的任何事情,你有沒有嘗試*'打印'@PivotTableSQL'而不是執行'執行',然後檢查代碼? –

+0

此外(雖然我懷疑這是問題),您應該知道[此警告](http://msdn.microsoft.com/en-us/library/ms189484.aspx):「不要在一個變量中使用SELECT語句連接值(即計算聚合值)可能會出現意外的查詢結果,這是因爲SELECT列表中的所有表達式(包括分配)不能保證每個輸出行只執行一次「 –

+0

根據達米安的評論替代使用突變的COALESCE做'GROUP_CONCAT'就是用'STUFF'和xml,例如這裏http://stackoverflow.com/a/11985946/314291 – StuartLC

回答

0

因爲你的擴展列擺動的MAX(printableValue1)各自的值現在將與在Expansion列中的數據的名稱列。更改此像這樣:

DECLARE @PivotColumnHeaders NVARCHAR(MAX) = 'Expansion1, Expansion2, Expansion3'; 

DECLARE @PivotTableSQL NVARCHAR(MAX); 
SET @PivotTableSQL = 
N'select subjectID, ' + @PivotColumnHeaders 
+' from #CD4_VL2 
    PIVOT 
(
    MAX([printableValue1]) 
    FOR [expansion] IN (' + @PivotColumnHeaders + ')) x'; 

Execute(@PivotTableSQL); 

SqlFiddle here