2010-10-15 39 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