wtorek, 12 stycznia 2010

SQL - ciekawostki

Znalazłem (i uruchomiłem nawet) fajną ciekawostkę ad SQLka:
(Działa tylko w SQL Server, nie działa w Accessie, Excelu, itp.)
Ale AFIN może to uruchamiać - uruchomiłem to właśnie w AFINIE.

Funkcja UNPIVOT (stąd przykład):
http://technet.microsoft.com/en-us/library/ms177410.aspx

ZASTOSOWANIE:
Konsolidacja budżetów

Tłumaczenie na polski:
Mamy duuużo budżetów, oczywiście w arkuszach Excela. Stawiamy    
komputer z SQL Serverem Expressem (żeby było taniej, żeby baza    
była 'porządna', tzn. żeby informatyk nie marudził, że jakiś    
Access, albo Excel).
I... (jedno kliknięcie w AFIN.NET.IS)... pyk... i mamy dane do    
dowolnych budżetowych tabel przestawnych


Przygotowanie (przykładowych) danych
DROP TABLE pvt
CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int, Emp3 int, Emp4    
int, Emp5 int)
INSERT INTO pvt VALUES (1,4,3,5,4,4);
INSERT INTO pvt VALUES (2,4,1,5,5,5);
INSERT INTO pvt VALUES (3,4,3,5,4,4);
INSERT INTO pvt VALUES (4,4,2,5,5,4);
INSERT INTO pvt VALUES (5,5,1,5,5,5);

Normalizacja:
SELECT VendorID, Employee, Orders FROM (SELECT VendorID, Emp1, Emp2,    
Emp3, Emp4, Emp5 FROM pvt) p UNPIVOT (Orders FOR Employee IN (Emp1,    
Emp2, Emp3, Emp4, Emp5)) AS unpvt

Widok danych:
VendorID    Emp1    Emp2    Emp3    Emp4    Emp5
1    4    3    5    4    4
2    4    1    5    5    5
3    4    3    5    4    4
4    4    2    5    5    4
5    5    1    5    5    5

Widok efektu końcowego (to działa!):
VendorID    Employee    Orders
1    Emp1    4
1    Emp2    3
1    Emp3    5
1    Emp4    4
1    Emp5    4
2    Emp1    4
2    Emp2    1
2    Emp3    5
2    Emp4    5
2    Emp5    5
3    Emp1    4
3    Emp2    3
3    Emp3    5
3    Emp4    4
3    Emp5    4
4    Emp1    4
4    Emp2    2
4    Emp3    5
4    Emp4    5
4    Emp5    4
5    Emp1    5
5    Emp2    1
5    Emp3    5
5    Emp4    5
5    Emp5    5

Pytania?

Brak komentarzy:

Prześlij komentarz