-2

Common Table Expression と 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)ため、最終的な選択リストで列を参照できません。それを参照したい場合は、列を2回含むクエリを変更して、最終的な選択に保持できるようにします。

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 に答える