sql >> Databáze >  >> RDS >> Sqlserver

Při použití PIVOT nezískáváte správné hodnoty SUM v SQL Server 2012

Následující dotaz by vám měl poskytnout to, co chcete:

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

Chcete-li pochopit, proč získáváte neočekávané výsledky, zkuste dotaz bez GROUP BY klauzule:

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

Výstup:

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

Nyní zkuste totéž znovu s druhou verzí ukázkových dat:

Výstup:

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

Porovnáním 2 různých sad výsledků můžete jasně vidět, že PIVOT probíhá pro každou kombinaci sloupců, které se jí neúčastní, tj. pro každou kombinaci Store , Sold .

V prvním případě je pouze Harrisburg,20,00 a Seattle,20,00 . Proto v tomto případě získáte pouze dva řádky. V druhém případě máte celkem 3 + 2 =5 kombinací.

Nyní můžete vidět, proč GROUP BY funguje pouze v druhém případě.



  1. AWS Datapipeline – problém se znaky s diakritikou

  2. Jak změnit hodnotu pro innodb_buffer_pool_size v MySQL na Mac OS?

  3. pdo připravil příkazy se zástupnými znaky

  4. Prohlášení FORALL s vázanou doložkou INDICES-OF v databázi Oracle