ROLLUP

ROLLUP ROLLUP rozszerza funkcjonalność klauzuli GROUP BY, o możliwość tworzenia tzw. kostek analitycznych połówkowych. Funkcja ta, przyjmuje jako parametry, analogicznie jak w zwykłym grupowaniu, atrybuty (nazwy kolumny) tabel wejściowych lub ich przekształcenia.

Chcę stworzyć zestawienie pokazujące sprzedaż w latach dla poszczególnych produktów i jednocześnie pokazać podsumowanie dla poszczególnych lat.

Skorzystam z bazy Northwind.

Zastosowanie ROLLUP (a,b,c), sprawi, że wykonane zostaną grupowania dla kolejnych kombinacji atrybutów :
GROUP BY (a,b,c)
GROUP BY (a,b)
GROUP BY (a)
oraz po całości, czyli GROUP BY () – co w praktyce zapisujemy bez jawnego grupowania (wszystkie kolumny tworzą część danych surowych)
ROLLUP to równoważnik realizacji N+1 grupowań. W przypadku podania trzech (a,b,c) atrybutów, zostaną wykonane 3 + 1 = 4 operacje.Moglibyśmy uzyskać to samo wykorzystując UNION, jednakże korzstem wydajności.

Stworzymy następujące zapytanie:

SELECT     YEAR(dbo.Orders.OrderDate) AS Rok, dbo.Products.ProductName,

ROUND(SUM(dbo.[Order Details].UnitPrice * dbo.[Order Details].Quantity – dbo.[Order Details].UnitPrice * dbo.[Order Details].Quantity * dbo.[Order Details].Discount), 2)

AS WartoscSprzedazy

FROM         dbo.Orders INNER JOIN

dbo.[Order Details] ON dbo.Orders.OrderID = dbo.[Order Details].OrderID INNER JOIN

dbo.Products ON dbo.[Order Details].ProductID = dbo.Products.ProductID INNER JOIN

dbo.Categories ON dbo.Products.CategoryID = dbo.Categories.CategoryID

GROUP BY ROLLUP (YEAR(dbo.Orders.OrderDate), dbo.Products.ProductName)

Otrzymamy następujący wynik:

rollup

 

Odpowiedz

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>