Przeczytaj
Zastosowanie kwerend krzyżowych
Kwerendy krzyżowe przedstawiają informacje zawarte w danej tabeli w nowy sposób – pozwalają m.in. na obliczanie średnich lub maksimów, a także na grupowanie rekordów i kolumn zgodnie z dowolnymi warunkami.
W programie LibreOffice Base domyślnie nie ma narzędzi ani komend SQL przeznaczonych do tworzenia kwerend krzyżowych. Dokumentacja LibreOffice wskazuje, że w razie potrzeby utworzenia takiego zestawienia należy wykorzystać osobny program — LibreOffice Calc.
Prosta kwerenda krzyżowa
Tworząc kwerendę krzyżową, wybieramy dwie kolumny z tabeli początkowej. Wartości z pierwszej kolumny staną się nowymi nazwami rekordów, a z drugiej – nazwami kolumn w tabeli wynikowej. Takie „skrzyżowanie” wartości z dwóch kolumn nadaje kwerendzie jej nazwę.
Tego rodzaju przekształcenie nie dodaje żadnych nowych informacji do tabeli, ale prezentuje je w bardziej zrozumiały sposób.
Przyjrzyjmy się tej kwestii na przykładzie tabeli przedstawiającej uczniów pewnego technikum oraz ich oceny z języka polskiego i angielskiego. W tej tabeli wywołamy kwerendę.

Tabelę możesz pobrać z załącznika:
Tablica posiada wiele powtórzeń, np. nazwiska i przedmioty, co utrudnia wgląd w zawartość tablicy. Najlepszym rozwiązaniem byłoby znormalizowanieznormalizowanie tej tablicy, jednak w tym przykładzie wykonamy kwerendę krzyżową, która przedstawi tablicę w przystępniejszej formie.
Utworzymy kwerendę, w której nazwiska uczniów będą nazwami rekordów, a przedmioty – oznaczeniami kolumn (nazwami pól). Przy każdym nazwisku znajduje się teraz lista ocen z kolejnych przedmiotów, dzięki czemu tabela jest przejrzysta.
Wynik kwerendy krzyżowej:

W kwerendzie krzyżowej wybór tego, co stanie się nazwami rekordów, a co nazwami kolumn, jest symetryczny. Równie dobrze można ustawić przedmioty jako nazwy rekordów, a nazwiska jako nazwy kolumn. W ten sposób otrzymamy tę samą tabelę, jedynie z lekko zmienionym układem.
Kreator kwerend
Przedstawioną tabelę można łatwo utworzyć przez wbudowany kreator kwerend. Znajduje się on w zakładce Tworzenie.
Najpierw należy wybrać Kreator kwerend krzyżowych w oknie dialogowym.

W kolejnym kroku dokonuje się wyboru kolumn, które będą opisywały każdy wiersz. W tym przypadku są to Imię i Nazwisko.

Zwróć uwagę na fakt, że po przeniesieniu tych pół do okna Wybrane pola, pojawią się one w przykładzie tabeli na dole okna, tak jak na przedstawionej ilustracji.
Następnie należy wybrać pola, które staną się kolumnami tworzonego przez nas zestawienia. W tym przypadku chcemy wypisać Oceny dla każdego Przedmiotu, w związku czym wybieramy pole Przedmiot, jako nagłówki kolumn.

Ta zmiana także jest widoczna w przykładzie na dole okna.
Ostatnim krokiem jest wybranie, jaka informacja ma się pojawić na skrzyżowaniu wierszy i kolumn. Są to oczywiście Oceny.

Oprócz pola należy wybrać także funkcję, która zostanie wykorzystana w przypadku kiedy istnieje wiele wartości dla wybranych przez nas wierszy i kolumn. Dotyczy to sytuacji, kiedy np. jeden uczeń (opisywany przez Imię i Nazwisko) posiada wiele ocen z jednego przedmiotu.
W tabeli występującej w tym zadaniu nie ma tego problemu — każdy uczeń ma tylko jedną ocenę z każdego przedmiotu. W związku z czym możemy wybrać np. funkcję Maksimum.
Po wybraniu opcji Dalej zaprojektowane przez nas zestawienie zostanie utworzone.
Składnia SQL
Mimo że składnia SQL jest bardziej złożona, to daje także znacznie większe możliwości w modyfikacji zestawienia, które projektujemy. Utwórzmy więc analogiczne zestawienie, wykorzystując ten język.
Oprócz zwykłego polecenia SELECT w kwerendach krzyżowych wykorzystuje się dwie dodatkowe operacje:
PIVOT – wybiera kolumnę, której wartości staną się nowymi nazwami kolumn,
TRANSFORM – wybiera wartości, które mają się pojawić w polach na skrzyżowaniu kolumn i rekordów, w tym przypadku są to oceny.
Składnia kwerendy krzyżowej to:
Przeanalizujmy tę składnię. W pierwszej linijce wybieramy wartość na skrzyżowaniu nowych rekordów i kolumn. Musimy zastosować tutaj funkcję agregującąfunkcję agregującą. Jest to zabezpieczenie na wypadek, gdybyśmy otrzymali wiele ocen spełniających późniejsze parametry (np. kilka ocen z jednego przedmiotu).
W drugiej linijce rozpoczynamy funkcję SELECT, tutaj należy wybrać kolumny, których wartości staną się rekordami w tabeli wynikowej. W tym przypadku to imiona i nazwiska.
Trzecia linijka wybiera tabelę (lub wiele tabel) zawierającą dane, które chcemy wyświetlić w kwerendzie.
Czwarta linijka zawiera kolumny, według których wynik ma być grupowany. Chcemy, aby oceny zostały pogrupowane według uczniów (obok każdego ucznia mają znajdować się jego oceny), więc zamieszczamy tutaj pola Imie i Nazwisko. W praktyce najczęściej wpisuje się tutaj te same kolumny, co w poleceniu SELECT.
Należy unikać połączeń pól Imie i Nazwisko do identyfikowania rekordów, może się bowiem zdarzyć, że dwie osoby nazywają się tak samo. Najlepszym rozwiązaniem jest wykorzystanie indeksów.
Dopiero w ostatniej linijce wybiera się kolumnę, której wartości staną się nazwami rekordów. W tym przypadku jest to oczywiście kolumna Przedmiot.
Ta kwerenda zwróci wynik niemal identyczny jak poprzednia – tym razem pojawią się jednak również imiona uczniów.
Sumowanie kwerendą krzyżową
Kwerendy krzyżowe pozwalają na zastosowanie funkcji agregujących, dzięki czemu przydają się do tworzenia różnego rodzaju podsumowań oraz raportów.
Przeanalizujmy teraz tabelę Zamowienia, przedstawiającą sprzedaż pewnej restauracji.

Tabelę możesz pobrać z załącznika:
Przekształćmy tę tabelę w taki sposób, aby otrzymać informację, ile poszczególni klienci wydali na zamówienia każdej kategorii produktów. Jako nazwy rekordów wykorzystamy wartości Nr_klienta, a jako nazwy kolumn – Kategoria. W polach na skrzyżowaniu Nr_klienta/Kategoria ma się wyświetlić suma cen tych zamówień.
Kod do tej kwerendy prezentuje się następująco:
Ponownie omówmy szczegółowe działanie kwerendy krok po kroku.
Przedstawione przykłady dotyczą zamówień z numerami od 1 do 4.
W pierwszym kroku wybierane są pola Cena ze wszystkich rekordów. Odpowiada za to linijka TRANSFORM.
Następnie zamówienia są grupowane według klientów, którzy je złożyli (GROUP BY>). Na tym etapie dane wyglądają następująco:

Identyfikator odpowiada numerowi zamówienia. Przy jego pomocy określamy, do jakiej kategorii należy zamówienie (sama cena o tym nie świadczy).
W kolejnym kroku wewnątrz grup cen (pole Cena‑Identyfikator) dochodzi do kolejnego grupowania, tym razem ze względu na kategorię (definiuje to PIVOT).

W ostatnim kroku każda podgrupa odpowiadająca danej kategorii zostaje sumowana (SUM(Cena)). Wynikowe rekordy zostają wyświetlone obok kolumn wybranych w SELECT. W tym wypadku jest to kolumna Nr_klienta.
Zwróć uwagę, że kategoria Napoje została usunięta, ponieważ żadne z zamówień od 1 do 4 ich nie zawiera.

Wywołanie tej kwerendy w całej tabeli dałoby następujący rezultat.

Otrzymujemy w ten sposób sprawne podsumowanie stosunkowo dużej tabeli.
Słownik
funkcja przyjmująca jako argument zbiór lub ciąg wartości, a zwracająca pojedynczą wartość jako wynik; przykładem takich funkcji są średnia, minimum, maximum
modyfikacja bazy tak, aby spełniała reguły jednej z postaci normalnych; pozwala to na usunięcie powtórzeń z bazy, zwiększenie jej spójności oraz przejrzystości; seria e‑materiałów Normalizacja Baz Danych omawia w szczegółach ten proces