sql >> Databasteknik >  >> RDS >> Sqlserver

Får inte de korrekta SUM-värdena i SQL Server 2012 när du använder en PIVOT

Följande fråga bör ge dig vad du vill ha:

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

För att förstå varför du får oväntade resultat, pröva din fråga utan GROUP BY klausul:

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

Utdata:

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

Försök nu samma sak igen med andra versionen av exempeldata:

Utdata:

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

Genom att jämföra de två olika resultatuppsättningarna kan du tydligt se den PIVOT sker för varje kombination av kolumner som inte deltar i den, d.v.s. för varje kombination av Store , Sold .

I det första fallet finns det bara Harrisburg,20,00 och Seattle,20,00 . Det är därför du bara får två rader i det här fallet. I det andra fallet har du totalt 3 + 2 =5 kombinationer.

Du kan nu se varför GROUP BY fungerar bara i det andra fallet.



  1. FEL! Servern avslutades utan att uppdatera PID-filen (/usr/local/var/mysql/`användarnamn`.lan.pid)

  2. Anslut bord från två olika servrar

  3. PHP-kod för att omdirigera om mysql-fältet är komplett

  4. Vad är meningen med självrefererande främmande nyckel?