【问题标题】:T-Sql - Pivot ErrorT-Sql - 枢轴错误
【发布时间】:2011-04-26 01:01:40
【问题描述】:

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

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

Temp 表 #FeeTotals 有 3 列 1) dwordrkey(唯一 id 键),2) Desc_Cd:费用描述,3) Total:货币列

    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)  

【问题讨论】:

  • 为了调试,能不能把EXECUTE换成PRINT。然后您可以查看失败的实际语句。

标签: sql tsql pivot pivot-table


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 2023-03-28
    • 2013-10-15
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多