Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Grupowanie wielowymiarowe w MS SQL

Podobne prezentacje


Prezentacja na temat: "Grupowanie wielowymiarowe w MS SQL"— Zapis prezentacji:

1 Grupowanie wielowymiarowe w MS SQL
Przykładowe dane

2

3 Tworzymy widok

4 USE [buczek] GO /****** Object: View [dbo].[Sprzedaz] Script Date: 11/25/ :32:07 ******/ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE VIEW [dbo].[Sprzedaz] AS SELECT dbo.ds_Asortymenty.NazwaAsortymentu, dbo.tch_ListaProduktow.Wymiar, dbo.ds_klienci.Nazwa, dbo.ha_Zamowienie.DataZamowienia, dbo.ha_ZamLinie.Ilosc FROM dbo.ds_klienci INNER JOIN dbo.ha_Zamowienie ON dbo.ds_klienci.Id = dbo.ha_Zamowienie.IdKlienta INNER JOIN dbo.ha_ZamLinie ON dbo.ha_Zamowienie.IdZamowienie = dbo.ha_ZamLinie.IdZamowienie INNER JOIN dbo.ds_Asortymenty INNER JOIN dbo.tch_ListaProduktow ON dbo.ds_Asortymenty.IdAsortymentu = dbo.tch_ListaProduktow.IdAsortymentu ON dbo.ha_ZamLinie.IdProduktu = dbo.tch_ListaProduktow.IdProduktu

5

6 SELECT NazwaAsortymentu, Nazwa, SUM(Ilosc) AS Razem
FROM dbo.Sprzedaz GROUP BY NazwaAsortymentu, Nazwa ORDER BY NazwaAsortymentu

7 SELECT NazwaAsortymentu, Nazwa, SUM(Ilosc) AS Razem
FROM Sprzedaz GROUP BY NazwaAsortymentu, Nazwa WITH CUBE

8 Zastępowanie wartości null
Funkcja GROUPING zwraca 1 jeśli wartość null jest wynikiem działania operatora CUBE klauzuli GROUP BY i 0 jeśli null jest wynikiem braku danych Funkcja ISNULL zastępuje null podaną wartością

9 SELECT CASE WHEN (GROUPING(NazwaAsortymentu) = 1) THEN 'Razem' ELSE ISNULL(NazwaAsortymentu, 'Nieznana') END AS Asortyment, CASE WHEN (GROUPING(Nazwa) = 1) THEN 'Razem' ELSE ISNULL(Nazwa, ‘Nieznana') END AS Firma, SUM(Ilosc) AS IloscRazem FROM dbo.Sprzedaz GROUP BY NazwaAsortymentu, Nazwa WITH CUBE

10 Podsumowania jednowymiarowe

11 SELECT CASE WHEN (GROUPING(NazwaAsortymentu) = 1) THEN 'Razem' ELSE ISNULL(NazwaAsortymentu, 'Nieznana') END AS Asortyment, SUM(Ilosc) AS IloscRazem FROM dbo.Sprzedaz GROUP BY NazwaAsortymentu WITH CUBE

12 Perspektywa umożliwia dowolne przeglądanie podsumowań

13 USE [buczek] GO /****** Object: View [dbo].[SprzedazCube3] Script Date: 11/27/ :45:27 ******/ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE VIEW [dbo].[SprzedazCube4] AS SELECT CASE WHEN (GROUPING(NazwaAsortymentu) = 1) THEN 'Razem' ELSE ISNULL(NazwaAsortymentu, ' Nieznana ') END AS Asortyment, CASE WHEN (GROUPING(Nazwa) = 1) THEN 'Razem' ELSE ISNULL(Nazwa, ' Nieznana ') END AS Firma, SUM(Ilosc) AS IloscRazem FROM dbo.Sprzedaz GROUP BY NazwaAsortymentu, Nazwa WITH CUBE

14 SELECT Asortyment, IloscRazem, Firma
FROM dbo.SprzedazCube4 WHERE (Asortyment = 'A-Rura z/s aluminiowana gładka') AND (Firma = 'Razem')

15 Transact - SQL Pracochłonne zapytania np. aktualizujące dane można zastąpić procedurami składowanymi

16 use buczek SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON CREATE PROCEDURE Dopisywanie @Nazwa char(255), @KodPocztowy char(255), @Miejscowosc char(255) AS BEGIN insert into ds_klienci (Nazwa, KodPocztowy, END

17 dopisywanie 'Firma A', '30-150', 'Kraków'

18

19 Kursor Kursor jest tabelą rekordów umożliwiającą dostęp do kolekcji pobranej z tabeli lub złożenia

20 USE buczek GO -- Execute the SELECT statement alone to show the -- full result set that is used by the cursor. SELECT Nazwa, Miejscowosc FROM ds_klienci ORDER BY Nazwa -- Declare the cursor. DECLARE kursor SCROLL CURSOR FOR SELECT Nazwa, Miejscowosc FROM ds_klienci OPEN kursor -- Fetch the last row in the cursor. FETCH LAST FROM kursor -- Fetch the row immediately prior to the current row in the cursor. FETCH PRIOR FROM kursor

21

22 -- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM kursor -- Fetch the row that is three rows after the current row. FETCH RELATIVE 3 FROM kursor -- Fetch the row that is two rows prior to the current row. FETCH RELATIVE -2 FROM kursor CLOSE kursor DEALLOCATE kursor GO

23

24 Wykorzystanie kursora
SELECT DataZamowienia, SUM(DISTINCT Ilosc) AS razem FROM Sprzedaz GROUP BY DataZamowienia ORDER BY DataZamowienia

25 USE buczek GO real DECLARE kursor CURSOR FOR SELECT SUM(DISTINCT Ilosc) AS razem FROM Sprzedaz GROUP BY DataZamowienia ORDER BY DataZamowienia OPEN kursor FETCH NEXT FROM kursor WHILE = 0 BEGIN PRINT SET END

26

27 Dopisywanie rekordów i identyfikacja klucza

28 USE [Test] GO /****** Object: StoredProcedure [dbo].[InsertZamowienie] Script Date: 11/27/ :58:44 ******/ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON ALTER PROCEDURE [dbo].[InsertZamowienie] @Klient char(255), @Data datetime, @Identity bigint AS bigint = IdKlienta FROM Klienci WHERE Nazwa INSERT INTO Zamowienia (Data, = SCOPE_IDENTITY()

29 Uruchomienie procedury
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON ALTER PROCEDURE Test AS bigint begin exec InsertZamowienie 'Firma AS', end

30

31 Przykład Fabryka rur stalowych produkuje rury z kręgów blachy stalowej w następujących operacjach rozcięcie kręgu (coil cut) perforowanie (perforating) – tylko dla rur perforowanych zgrzewanie Zamówienia składają się z wielu linii Dla każdej wprowadzonej linii należy opracować kartę technologiczną (Product card)

32 Wyzwalacze W tabeli OrderLine po wpisaniu nowego zamówienia automatycznie uzupełniamy pole Status wartością „1”

33

34

35 po opuszczeniu linii:

36 „Uzbrajanie” linii zamówienia
Każda linia zawiera identyfikator produktu finalnego Opis wszystkich faz procesu zapisany jest w tabeli ProductionPlan, przy czym IdStock jest identyfkatorem półproduktu opisanego w tabeli Product Ze względu na iterację nie można wygenerować opisu technologii dla linii zamówienia przy pomocy prostego zapytania SQL

37 Diagram i zawartość linii zamówień

38 Diagram powiązań opisu technologii

39 Wykorzystanie Transact-SQL
Język Transact-SQL wprowadza elementy języków proceduralnych takich jak pętla, warunek logiczny, zmienna pamięciowa Przykładowa procedura odszukuje w tabeli ProductionPlan wiersz dla operacji, której wynikiem jest wyrób gotowy a następnie w pętli szuka kolejnych półproduktów aż do chwili gdy zapytanie SELECT nie zmienia wartości indeksu półproduktu

40 declare @adress bigint, @adress1 bigint, @stock real, @yield real
SELECT TOP 1 @stock=OrderLine. FROM OrderLine INNER JOIN Product ON OrderLine.IdProduct = Product.IdProduct INNER JOIN ProductionPlan ON Product.IdProduct = ProductionPlan.IdProduct WHERE orderline.status=1 print 'Ordered product Id:' print 'First semiproduct Id:' print 'Yield:' set print 'Stock for first operation:' begin set SELECT @adress1=ProductionPlan.IdStock FROM ProductionPlan WHERE SELECT @yield=ProductionPlan.Yield @adress print 'Next semiproduct Id:' print 'Stock for next operation:' end

41 Ordered product Id: 43 First semiproduct Id: 999 Yield: 0.95 Stock for first operation: Next semiproduct Id: 937 0.9 Stock for next operation: 1781 1

42 Tworzenie karty technologicznej
Do tabeli ProductCard dopisywane są kolejne rekordy opisujące operacje w ciągu technologicznym

43 declare @adress bigint, @adress1 bigint, @orderid bigint, @stock real, @yield real,
@operation real SELECT TOP 1 @stock=OrderLine. @productivity=ProductionPlan.Productivity FROM OrderLine INNER JOIN Product ON OrderLine.IdProduct = Product.IdProduct INNER JOIN ProductionPlan ON Product.IdProduct = ProductionPlan.IdProduct WHERE orderline.status=1 INSERT INTO ProductCard (IdOrderLine, IdOperation,IdTool,IdUnit,Productivity,Yield,IdStock) @adress1) set begin set SELECT @operation=ProductionPlan.IdOperation, FROM ProductionPlan WHERE @adress end

44


Pobierz ppt "Grupowanie wielowymiarowe w MS SQL"

Podobne prezentacje


Reklamy Google