2016-04-07 7 views
-1

eine Pivot-Abfrage benötigen Spalten (Loc) auf Zeilen von (ITEM_NO)SQL Severer - Pivot-Abfrage - drehen Zeilen in Spalten

vorhandenen Tabelle gruppiert zu konvertieren: `

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 

zu schwenken, die Standorte zu Zeilen und erhalten die entsprechende Menge, Preis, Großhandelspreis und Kategorie

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 

ich versuche, die folgende Abfrage auf das oben beschriebene Szenario zu bewerben, aber nicht funktioniert ..

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; 

Danke für Hilfe !!

+0

In welcher Weise funktioniert es nicht? Erhalten Sie eine Fehlermeldung (wenn ja was) oder unerwartete Ergebnisse? –

+0

Mögliches Duplikat von [SQL Server Pivot Table mit mehreren Spaltenaggregaten] (http://stackoverflow.com/questions/14694691/sql-server-pivot-table-with-multiple-column-aggregates) –

Antwort

0

Anstatt mehrere Pivots zu verwenden, ist es möglicherweise besser, nur die MAX(CASE WHEN) Aggregation zu verwenden, um Ihr Ergebnis zu erstellen. MIN und SUM können anstelle von MAX verwendet werden. Dies kann auch dynamisch wie PIVOT erfolgen.

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

Vielen Dank Jamie !! ! Ich werde es versuchen und Sie wissen lassen. Haben Sie einen guten Tag. :) – Blisslights