【问题标题】:Why an I getting Invalid Column Name in Pivot Table为什么我在数据透视表中得到无效的列名
【发布时间】:2015-09-02 17:31:49
【问题描述】:

我正在用 SQL 制作数据透视表。我正在尝试让IsNull(ItemQty, 0) 工作。我拥有下面代码的方式将无法正常工作,因为它会引发以下错误。如果我将顶部的 Select 语句更改为仅 Select * from () 它将起作用。但是,那不允许我做 IsNull 。

ShipWeekMod 和 ItemQty 是 vtc_ItemForecastSummary 视图中 CASE 语句的结果。有什么想法吗?

消息 207,级别 16,状态 1,第 16 行无效的列名称“ShipWeekMod”。 消息 207,级别 16,状态 1,第 16 行列名“ItemQty”无效。

select
OfferTypeShipYear, EDPNO, OfferType, ShipYear, ShipWeekMod, IsNull(ItemQty, 0) as ItemQty
from
(
select OfferTypeShipYear, EDPNO, OfferType, ShipYear, ShipWeekMod, ItemQty as ItemQty from vtc_ItemForecastSummary
) DataTable
PIVOT
(
  SUM(ItemQty)
  FOR ShipWeekMod
  IN (
    [2],[4],[6],[8],[10],[12],[14],[16],[18],[20],[22],[24], [26],[28],[30],[32],[34],[36],[38],[40],[42],[44],[46],[48],[50],[52] 
  )
) PivotTable

【问题讨论】:

    标签: sql sql-server pivot-table


    【解决方案1】:

    您不能重复使用您在选择中旋转的列。相反,您必须将 isnull 函数应用于枢轴返回的每一列。由于这可能很乏味,您可以考虑重写查询以使用动态 sql。

    应该是这样的:

    select 
        OfferTypeShipYear, EDPNO, OfferType, ShipYear,
        isnull([2],0) as [2],
        isnull([4],0) as [4],
        isnull([6],0) as [6],
        isnull([8],0) as [8]
        ... etcetera
    
    from (
        select 
           OfferTypeShipYear, EDPNO, OfferType, 
           ShipYear, ShipWeekMod, ItemQty 
        from vtc_ItemForecastSummary
    ) DataTable
    PIVOT (
      SUM(ItemQty)
      FOR ShipWeekMod
      IN (
        [2],[4],[6],[8],[10],[12],[14],[16],[18],[20],[22],[24], 
        [26],[28],[30],[32],[34],[36],[38],[40],[42],[44],[46],[48],[50],[52] 
      )
    ) PivotTable
    

    【讨论】:

    • 谢谢。但是,这仍然会引发 Null。
    • @macecase 我刚刚意识到。您必须将 isnull 应用于枢轴返回的每一列。我已经更新了答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2016-12-18
    相关资源
    最近更新 更多