T-Sql - 数据透视错误

时间:2010-10-15 16:27:23

标签: sql tsql pivot pivot-table

我在T-Sql查询中有以下代码,我收到以下错误消息,我不确定是什么导致错误。我正在将Pivot语句写成动态b / c我不知道将返回的列。

错误消息:消息8156,级别16,状态1,行9 “数据透视表”已多次指定“标题 - 背书费用/ END8”列。

Temp Table #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)  

1 个答案:

答案 0 :(得分:3)

创建标题时,您需要从#FeeTotals中选择Desc_Cd的DISTINCT值。它必须在那里两次。还可以使用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