Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Bei Verwendung eines PIVOT werden in SQL Server 2012 nicht die richtigen SUM-Werte abgerufen

Die folgende Abfrage sollte Ihnen das geben, was Sie wollen:

SELECT Store,
       TotalSold,
       [John] AS WastedByJohn,
       [Jim] AS WastedByJim,
       [Alex] AS WastedByAlex
FROM (SELECT Store, Employee, Waste,
             SUM(Sold) OVER (PARTITION BY Store) AS TotalSold
      FROM #Foo) src
PIVOT
    (SUM(Waste)
     FOR Employee IN ([John], [Jim], [Alex])
    ) PVT

Um zu verstehen, warum Sie unerwartete Ergebnisse erhalten, versuchen Sie Ihre Abfrage ohne GROUP BY Klausel:

SELECT Store, Sold, [John], [Jim], [Alex]
FROM 
    #Foo
PIVOT
    (SUM(Waste)
     FOR Employee IN ([John], [Jim], [Alex])
    ) PVT

Ausgabe:

Store       Sold    John    Jim     Alex
Harrisburg  20,00   20,00   10,00   NULL
Seattle     20,00   NULL    10,00   10,00

Versuchen Sie es jetzt noch einmal mit der zweiten Version der Beispieldaten:

Ausgabe:

Store       Sold    John    Jim     Alex
Harrisburg  25,00   10,00   NULL    NULL
Harrisburg  30,00   10,00   NULL    NULL
Harrisburg  40,00   NULL    10,00   NULL
Seattle     50,00   NULL    10,00   NULL
Seattle     60,00   NULL    NULL    10,00

Durch den Vergleich der 2 verschiedenen Ergebnismengen können Sie diesen PIVOT deutlich erkennen findet für jede Kombination von nicht daran beteiligten Spalten statt, also für jede Kombination von Store , Sold .

Im ersten Fall gibt es nur Harrisburg,20,00 und Seattle,20,00 . Deshalb erhalten Sie in diesem Fall nur zwei Zeilen. Im zweiten Fall haben Sie insgesamt 3 + 2 =5 Kombinationen.

Sie können jetzt sehen, warum GROUP BY funktioniert nur im zweiten Fall.