Grupowanie wielowymiarowe w MS SQL

Slides:



Advertisements
Podobne prezentacje
G.Broda Helsinki 20-22, September 2010
Advertisements

Projekt Do kariery na skrzydłach – studiuj Aviation Management Projekt współfinansowany ze ś rodków Europejskiego Funduszu Społecznego. Biuro projektu:
Statistics – what is that? Statystyka dla gimnazjalistów.
Projekt Do kariery na skrzydłach – studiuj Aviation Management Projekt współfinansowany ze ś rodków Europejskiego Funduszu Społecznego. Biuro projektu:
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Pomysł Sukces Wstępne rozwiązanie Symulacja Wynik zadowala? Poprawa rozwiązania Nie Tak Podstawowa pętla projektowania.
Analiza wywołania i przebiegu przerwań w systemie Linux
Wykład 3 Prowadzący: dr Paweł Drozda
Skrypty, procedury przechowywane i wyzwalane
Projekt Do kariery na skrzydłach – studiuj Aviation Management Projekt współfinansowany ze ś rodków Europejskiego Funduszu Społecznego. Biuro projektu:
Projekt Do kariery na skrzydłach – studiuj Aviation Management Projekt współfinansowany ze ś rodków Europejskiego Funduszu Społecznego. Biuro projektu:
Projekt Do kariery na skrzydłach – studiuj Aviation Management Projekt współfinansowany ze ś rodków Europejskiego Funduszu Społecznego. Biuro projektu:
Sun altitude Made by: Patryk Cichy Patryk Cichy Mateusz Dąbrowicz Mateusz Dąbrowicz Mariusz Król Mariusz Król Mariusz Dyrda Mariusz Dyrda Group leader:
Technologia .Net Bazy danych część 2..
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Język SQL Część II.
Copyright for librarians - a presentation of new education offer for librarians Agenda: The idea of the project Course content How to use an e-learning.
Bazy danych II Instrukcja INSERT Piotr Górczyński 25/08/2001.
25/08/ Bazy danych II Piotr Górczyński MS Access – Action Query.
Dzielenie relacyjne / Relational Division
Co to jest studium przypadku?
Parallel Processing, Pipelining, Flynn’s taxonomy
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze
ZSBD PL/SQL CZĘŚĆ 3 Wykład 5 Prowadzący: dr Paweł Drozda.
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
SQL select kredytobiorca,bank, rodzaj, data_zawarcia, klasyfikacja,kwota, terminzapadalnosci-data_zawarcia iledni from tab_kredyt where (terminzapadalnosci-data_zawarcia)>1095.
--create view kredyty2 as select bank, rodzaj, data_zawarcia, klasyfikacja, kwota from tab_kredyt where upper(klasyfikacja) not like('N%') --with Read.
Współprogramy Plan: Motywacja Składnia Scenariusz obiektu współprogramu Przykłady Producent – konsument ( instrukcja attach ) Czytelnik -pisarze ( instukcja.
Technologia.Net Bazy danych. Technologia ADO.Net Służy do dostarczania danych z rożnych źródeł (baz danych) do aplikacji Jest produktem Microsoft Umożliwia.
Język SQL (Structured Query Language) DDL (Data Definition Language)
Przykład włamania do aplikacji internetowej poprzez modyfikację zapytań SQL Skrypty ASP Serwer bazy danych MS SQL Server Piotr Kuźniacki BDi.
DIRECT &INDIRECT QUESTIONS
Menu Polish English Polski Angielski.
Przetwarzanie w oknie - nowa siła zapytań
Monika Rokosik Katarzyna Rola. Wykrywanie kursu akcji poniżej dołka znajdującego się pomiędzy dwoma sąsiednimi górkami, z których późniejsza jest mniejsza.
Rozproszone transakcje z wykorzystaniem usługi Service Broker w SQL Server 2008 R2 Andrzej Ptasznik.
REKURENCJA.
LINQ (Language-INtegrated Query) Marcin Bohdziewicz s4070.
Delphi i Acad cd.. l_poz := MSpace.Count; Label3.Caption:=IntToStr(l_poz); ent:=Mspace.Item(0); for l_poz := 0 to MSpace.Count-1 do begin; ent:=Mspace.Item(l_poz);
TVP SA Odział w Łodzi Łódź ul. Narutowicza 13 TVP Łódź the Year of anniversary – it is already 55 years together.
Click to show the screen.
Dzień Jak będzie ładna pogoda, to zbiórka jest pod tunelem z rowerami o 9:40 Jeżeli pogoda nie dopisze, to zbiórka jest pod moim domofonem.
Tablice.
Przeglądanie inOrder function BSTinorder(BSTNode root) if root NOT NULL BSTinorder(root.left) Print(root) BSTinorder(root.right) 2, 4, 6, 8, 9, 10, 12,
Podstawy programowania
Wacław Sierpiński.
PHP Operacje na datach Damian Urbańczyk. Operacje na datach? Dzięki odpowiednim funkcjom PHP, możemy dokonywać operacji na datach. Funkcje date() i time()
Elementy programowania97 Użycie zmiennych w procedurze Sub ObliczWiek() 'deklaracja zmiennych Dim ImieNazwisko As String Dim DataUrodzenia As Date Dim.
Warsztaty C# Część 2 Grzegorz Piotrowski Grupa.NET PO
Bazy danych.
A. Jędryczkowski – 2006 ©. Tablica to struktura danych zawierająca zbiór obiektów tego samego typu i odpowiada matematycznemu pojęciu wektora (tablica.
Turbo Pascal umożliwia wykorzystanie w programach zbiorów teoriomnogościowych, których elementy muszą należeć do pewnego określonego typu. Typ zbiorowy.
Pliki elementowe – A. Jędryczkowski © 2007 Turbo Pascal umożliwia wykorzystanie w programach plików elementowych. Pliki takie zawierają informację zakodowaną
W.K. (c) Bazy danych Access. 2W.K. (c) 2007 Baza danych - definicje Baza danych to zbiór informacji dotyczących określonego tematu (stanowiących.
IBM Tivoli Storage Manager Strojenie A Presentation by Paweł Krawczyk June 8, 2011.
Procedura Jak postępować z klientem po konwersji Profile 5.1 Następny.
Warsztaty użytkowników programu PLANS – Karwia06 Język makropoleceń JMP programu PLANS Część I mgr inż. Tomasz Zdun.
Instrukcja switch switch (wyrażenie) { case wart_1 : { instr_1; break; } case wart_2 : { instr_2; break; } … case wart_n : { instr_n; break; } default.
Rozdział 3: Bezpieczeństwo w sieci opartej na systemie Windows 2000.
Komtech Sp. z o.o. Magic Janusz ROŻEJ.
ASP BAZY DANYCH. 2 S. Wolek Wst. do Inf. Połączenie z bazą danych przez ADO (ActiveX Data Object) do: - źródła ODBC - bazy z podanie nazwy sterownika.
1.
Bazy Danych Programowanie w SQL Wojciech St. Mościbrodzki
NIEPUBLICZNA SZKOŁA PODSTAWOWA
PL/SQL – dalsza wędrówka
SQL – część II.
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 6.
Autor: Damian Urbańczyk
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
Wykład 3 Prowadzący: dr Paweł Drozda. Użytkownik bazy danych – osoba lub aplikacja, mająca dostęp do części danych zgromadzonych w bazie Uprawnienia –
Zapis prezentacji:

Grupowanie wielowymiarowe w MS SQL Przykładowe dane

Tworzymy widok

USE [buczek] GO /****** Object: View [dbo].[Sprzedaz] Script Date: 11/25/2007 11: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

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

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

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ą

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

Podsumowania jednowymiarowe

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

Perspektywa umożliwia dowolne przeglądanie podsumowań

USE [buczek] GO /****** Object: View [dbo].[SprzedazCube3] Script Date: 11/27/2007 15: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

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

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

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, Miejscowosc) values (@Nazwa, @KodPocztowy, @Miejscowosc) END

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

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

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

-- 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

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

USE buczek GO DECLARE @Il real, @Poprzedni real, @Dynamika 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 INTO @Poprzedni WHILE @@FETCH_STATUS = 0 BEGIN INTO @Il PRINT @Il PRINT @Poprzedni PRINT @Il/@Poprzedni SET @Poprzedni=@Il END

Dopisywanie rekordów i identyfikacja klucza

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

Uruchomienie procedury SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON ALTER PROCEDURE Test AS DECLARE @indeks bigint begin exec InsertZamowienie 'Firma AS', '2007-11-30', @indeks PRINT @indeks end

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)

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

po opuszczeniu linii:

„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

Diagram i zawartość linii zamówień

Diagram powiązań opisu technologii

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 (@adress1)

declare @adress bigint, @adress1 bigint, @stock real, @yield real SELECT TOP 1 @adress1=ProductionPlan.IdStock,@adress=OrderLine.IdProduct, @stock=OrderLine. Quantity, @yield=ProductionPlan.Yield 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 @adress print 'First semiproduct Id:' print @adress1 print 'Yield:' print @yield set @stock=@stock/@yield print 'Stock for first operation:' print @stock while @adress1 <> @adress begin set @adress=@adress1 SELECT @adress1=ProductionPlan.IdStock FROM ProductionPlan WHERE ProductionPlan.IdProduct=@adress SELECT @yield=ProductionPlan.Yield if @adress1<> @adress print 'Next semiproduct Id:' print 'Stock for next operation:' end

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

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

declare @adress bigint, @adress1 bigint, @orderid bigint, @stock real, @yield real, @operation bigint,@tool bigint,@unit bigint, @productivity real SELECT TOP 1 @adress1=ProductionPlan.IdStock,@adress=OrderLine.IdProduct, @stock=OrderLine. Quantity, @yield=ProductionPlan.Yield, @orderid=OrderLine.IdOrderLine, @operation=ProductionPlan.IdOperation, @tool=ProductionPlan.IdTool, @unit=ProductionPlan.IdUnit, @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) VALUES (@orderid, @operation, @tool, @unit, @productivity, @yield, @adress1) set @stock=@stock/@yield while @adress1 <> @adress begin set @adress=@adress1 SELECT @adress1=ProductionPlan.IdStock, @yield=ProductionPlan.Yield, @operation=ProductionPlan.IdOperation, FROM ProductionPlan WHERE ProductionPlan.IdProduct=@adress if @adress1<> @adress end