2016-04-07 4 views
-1

の行をオンSQL厳しい - ピボットクエリ - (Item_No)によってグループ化された行に列(LOC)を変換するために、ピボットクエリが必要列に

既存の表: `

ITEM_NO, LOC, Quantity, Price, WholSalePrice, Category 
A18000, Loc1, 11, 100, 80, 1 

A18001, LOC2, 22, 101, 81, 1 

A18002, LOC3, 33, 102, 79, 1 

A18003 ,LOC4, 44, 99, 78, 1 

A18004, LOC5, 55, 98, 77, 1 

B18000, Loc1, 888 ,10, 8, 2 

B18001, LOC2, 999, 11, 7, 2 

B18002, LOC3, 887, 12, 9, 2 

B18003, LOC4, 885, 13, 6, 2 

B18004, LOC5, 887, 14, 5, 2 

に場所を旋回します行と対応する数量、価格、卸売価格とカテゴリを取得

ITEM_NO, Loc1-Quantity, Loc1-Price, Loc1-WholSalePrice, Loc1-Category, Loc2-Quantity, Loc2-Price, Loc2-WholSalePrice, Loc2-Category, Loc3-Quantity, Loc3-Price, Loc3-WholSale Price, 

    A18000, 11, 100, 80, 1, 22, 101, 81, 1, 33, 102, 79 

    B18000, 888, 10, 8, 2, 999 ,11 ,7, 2, 887, 12 ,9 

私は上記のシナリオで次の問合せを適用しようとしますが、動作していないのです。..

USE AdventureWorks; 
GO 
SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5 
FROM 
(SELECT PurchaseOrderID, EmployeeID, VendorID 
FROM Purchasing.PurchaseOrderHeader) p 
PIVOT 
(
COUNT (PurchaseOrderID) 
FOR EmployeeID IN 
([250], [251], [256], [257], [260]) 
) AS pvt 
ORDER BY pvt.VendorID; 

ありがとうございます!

+0

どのように動作しませんか?エラーメッセージ(もしあれば)や予期しない結果を受け取っていますか? –

+0

[複数の列集約を持つSQL Serverピボットテーブル]の重複している可能性があります(http://stackoverflow.com/questions/14694691/sql-server-pivot-table-with-multiple-column-aggregates) –

答えて

0

複数のピボットを行う代わりに、MAX(CASE WHEN)アグリゲーションを使用して結果を作成する方が良い場合があります。 MAXの代わりにMINSUMを使用することもできます。これはPIVOTのように動的に行うこともできます。

SELECT [ITEM_NO]    = LEFT(ITEM_NO, 5) + '0', 
     [Loc1-Quantity]   = MAX(CASE WHEN [LOC] = 'Loc1' THEN [Quantity] END), 
     [Loc1-Price]   = MAX(CASE WHEN [LOC] = 'Loc1' THEN [Price] END), 
     [Loc1-WholSalePrice] = MAX(CASE WHEN [LOC] = 'Loc1' THEN [WholSalePrice] END), 
     [Loc1-Category]   = MAX(CASE WHEN [LOC] = 'Loc1' THEN [Category] END), 
     [Loc2-Quantity]   = MAX(CASE WHEN [LOC] = 'Loc2' THEN [Quantity] END), 
     [Loc2-Price]   = MAX(CASE WHEN [LOC] = 'Loc2' THEN [Price] END), 
     [Loc2-WholSalePrice] = MAX(CASE WHEN [LOC] = 'Loc2' THEN [WholSalePrice] END), 
     [Loc2-Category]   = MAX(CASE WHEN [LOC] = 'Loc2' THEN [Category] END)  
     -- etc... 
FROM myTable 
GROUP BY LEFT(ITEM_NO, 5) 
+0

ありがとうございますJamie !! !私はそれを試してあなたに知らせるでしょう。良い一日を過ごしてください。 :) – Blisslights

関連する問題