-2

我正在使用公用表表达式和 PIVOT 函数来获取过去 5 年销售的产品数量,但出现错误。为什么我收到以下错误?

USE ADVENTUREWOKS2012;

WITH SALESDATA AS
(
    SELECT
        Product.PRODUCTID,
        Product.Name,
        YEAR(OrderDate) AS [YEAR SOLD]
    FROM Purchasing.PurchaseOrderDetail
    JOIN Production.Product
       ON Product.ProductID = PurchaseOrderDetail.ProductID
    JOIN Purchasing.PurchaseOrderHeader
       ON PurchaseOrderDetail.PurchaseOrderID = PurchaseOrderHeader.PurchaseOrderID
    GROUP BY Product.PRODUCTID,Product.Name,YEAR(OrderDate)
)
SELECT Name,
   [2005],
   [2006],
   [2007],
   [2008],
   [2009],
   PRODUCTID
FROM SALESDATA
PIVOT (COUNT(PRODUCTID) FOR [YEAR SOLD] IN ([2005], [2006], [2007], [2008], [2009])) AS P;

错误:

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

4

1 回答 1

1

您正在使用ProductIdPIVOT 中的列 -count(productId)因此您无法在最终选择列表中引用该列。如果要引用它,请更改包含两次该列的查询,以便将其保留在最终选择中:

WITH SALESDATA AS
(
    SELECT
        pivProd = Product.PRODUCTID,
        Product.PRODUCTID,
        Product.Name,
        YEAR(OrderDate) AS [YEAR SOLD]
    FROM Purchasing.PurchaseOrderDetail
    JOIN Production.Product
       ON Product.ProductID = PurchaseOrderDetail.ProductID
    JOIN Purchasing.PurchaseOrderHeader
       ON PurchaseOrderDetail.PurchaseOrderID = PurchaseOrderHeader.PurchaseOrderID
    GROUP BY Product.PRODUCTID,Product.Name,YEAR(OrderDate)
)
SELECT Name,
   [2005],
   [2006],
   [2007],
   [2008],
   [2009],
   PRODUCTID
FROM SALESDATA
PIVOT 
(
  COUNT(pivProd) FOR [YEAR SOLD] IN ([2005], [2006], [2007], [2008], [2009])
) AS P;

或者只是从最终选择中删除它:

WITH SALESDATA AS
(
    SELECT
        Product.PRODUCTID,
        Product.Name,
        YEAR(OrderDate) AS [YEAR SOLD]
    FROM Purchasing.PurchaseOrderDetail
    JOIN Production.Product
       ON Product.ProductID = PurchaseOrderDetail.ProductID
    JOIN Purchasing.PurchaseOrderHeader
       ON PurchaseOrderDetail.PurchaseOrderID = PurchaseOrderHeader.PurchaseOrderID
    GROUP BY Product.PRODUCTID,Product.Name,YEAR(OrderDate)
)
SELECT Name,
   [2005],
   [2006],
   [2007],
   [2008],
   [2009]
FROM SALESDATA
PIVOT 
(
  COUNT(PRODUCTID) FOR [YEAR SOLD] IN ([2005], [2006], [2007], [2008], [2009])
) AS P;
于 2013-10-02T15:40:54.207 回答