2010-10-15 48 views
0

我在T-SQL查詢中有以下代碼,我收到以下錯誤消息,我不確定是什麼導致了錯誤。我正在寫樞軸聲明是動態的B/C我不知道將被返回的列。T-SQL - 樞軸錯誤

錯誤消息:消息8156,級別16,狀態1,行9 「標題 - 背書費/ END8」列多次爲「數據透視表」指定。

臨時表#FeeTotals有3列1)dwordrkey(唯一ID鍵),2)Desc_Cd:充電的描述,3)總計:一錢列

DECLARE @PivotColumnHeaders VARCHAR(MAX) 
    SELECT @PivotColumnHeaders = 
     COALESCE(
     @PivotColumnHeaders + ',[' + cast(Desc_Cd as varchar) + ']', 
     '[' + cast(Desc_cd as varchar)+ ']' 
    ) 
    From #FeeTotals 

    DECLARE @PivotTableSQL NVARCHAR(MAX) 

    SET @PivotTableSQL = N' 
    Select * 
    From #FeeTotals 
    PIVOT 
     (
    Sum(Total) 
    For Desc_Cd In (' + @PivotColumnHeaders + ') 
) 
    As PivotTable' 

    Execute(@PivotTableSQL) 
+2

對於調試,您可以用PRINT替換EXECUTE。然後你可以查看失敗的實際語句。 – bobs 2010-10-15 16:29:25

回答

3

您需要選擇DISTINCT Desc_Cd的值從#FeeTotals創建標題時。它必須在那裏兩次。同樣使用QuoteName函數,以便您的代碼正確處理包含]字符的任何Desc_Cd值。

DECLARE @PivotColumnHeaders NVARCHAR(MAX) 

SELECT @PivotColumnHeaders = 
COALESCE(@PivotColumnHeaders + ',' + Desc_Cd, Desc_Cd) 
    FROM(
    SELECT DISTINCT QUOTENAME(Desc_Cd) AS Desc_Cd 
    FROM #FeeTotals 
    ) F