Wprowadzenie do SQL TEMAT 3 - Zadania dodatkowe 1. Wyselekcjonować firmy z Wrocławia lub Krakowa, którym Nasza firma sprzedała cokolwiek w sierpniu 1992 (użyj funkcji Year i Month). SELECT DISTINCT FIRMY.Nr, FIRMY.Nazwa FROM (FIRMY INNER JOIN DOKUMENTY ON FIRMY.Nr = DOKUMENTY.NrNabywcy) INNER JOIN MIEJSCOWOŚCI ON FIRMY.KodMjc = MIEJSCOWOŚCI.Kod WHERE (MIEJSCOWOŚCI.Nazwa="Wrocław" OR MIEJSCOWOŚCI.Nazwa="Kraków") AND NrSprzedawcy=0 AND MONTH(Data)=8 AND YEAR(Data)=1992; Uwaga: Nazwy pól muszą być kwalifikowane pole NAZWA zdefiniowano w tabelach FIRMY i MIEJSCOWOŚCI;
2. Znaleźć miejscowości klientów Naszej firmy, którzy to klienci kupili ryż na kwotę większą niż 30 zł jednorazowo lub kupili kawę na kwotę większą niż 50 zł jednorazowo. SELECT DISTINCT Kod, MIEJSCOWOŚCI.Nazwa FROM (((TOWARY INNER JOIN POZYCJEDOKUMENTU ON TOWARY.Symbol = POZYCJEDOKUMENTU.SmbTow) INNER JOIN DOKUMENTY ON POZYCJEDOKUMENTU.NrSprzedawcy = DOKUMENTY.NrSprzedawcy AND POZYCJEDOKUMENTU.NrFaktury = DOKUMENTY.NrFaktury) INNER JOIN FIRMY ON DOKUMENTY.NrNabywcy =FIRMY.Nr) INNER JOIN MIEJSCOWOŚCI ON FIRMY.KodMjc= MIEJSCOWOŚCI.Kod WHERE ((TOWARY.Nazwa Like "*kawa*" AND [ilość]*[cenanetto]>50) OR (TOWARY.Nazwa Like "*ryż*" AND [ilość]*[cenanetto]>30)) AND DOKUMENTY.[NrSprzedawcy]=0;
3. Dla każdej firmy z Wrocławia znaleźć sumaryczną kwotę podatku VAT zapłaconego w związku z zakupami w "Naszej Firmie" w lipcu 1992 (użyj funkcji Year i Month). SELECT FIRMY.Nr, FIRMY.Nazwa, Sum([ilość]*[cenanetto]*[stawkaVat]) AS VAT FROM (((MIEJSCOWOŚCI INNER JOIN FIRMY ON MIEJSCOWOŚCI.Kod = FIRMY.KodMjc) INNER JOIN DOKUMENTY ON FIRMY.Nr = DOKUMENTY.NrNabywcy) INNER JOIN POZYCJEDOKUMENTU ON DOKUMENTY.NrFaktury = POZYCJEDOKUMENTU.NrFaktury AND DOKUMENTY.NrSprzedawcy = POZYCJEDOKUMENTU.NrSprzedawcy) INNER JOIN TOWARY ON POZYCJEDOKUMENTU.SmbTow = TOWARY.Symbol WHERE DOKUMENTY.NrSprzedawcy=0 AND Year(data)=1992 AND Month(data)=7 GROUP BY FIRMY.Nr, FIRMY.Nazwa;
4. Znaleźć dwie najlepsze (pod względem kwoty sprzedaży) firmy, u których zaopatrywała się Nasza firma w lipcu 1992 (użyj funkcji Year i Month). SELECT TOP 2 FIRMY.Nr, FIRMY.Nazwa, Sum([ilość]*[cenanetto]) AS KWOTA FROM (FIRMY INNER JOIN DOKUMENTY ON FIRMY.Nr = DOKUMENTY.NrSprzedawcy) INNER JOIN POZYCJEDOKUMENTU ON DOKUMENTY.NrSprzedawcy = POZYCJEDOKUMENTU.NrSprzedawcy AND DOKUMENTY.NrFaktury = POZYCJEDOKUMENTU.NrFaktury WHERE DOKUMENTY.NrNabywcy=0 AND Year(data)=1992 AND Month(data)=7 GROUP BY FIRMY.Nr, FIRMY.Nazwa ORDER BY Sum(ilość*cenanetto) DESC;
5. Znaleźć trzy najlepiej sprzedające się towary klientom Naszej firmy z woj. dolnośląskiego. UWAGA: Kryterium wyboru 3 firm jest najwyższa sumaryczna kwota sprzedaży, ale z treści zadania nie wynika potrzeba pokazania kwoty. Dlatego na liście pól brak wyrażenia obliczającego kwotę i jest ono tylko w klauzuli ORDER. SELECT TOP 3 Symbol, TOWARY.Nazwa FROM ((((WOJEWÓDZTWA INNER JOIN MIEJSCOWOŚCI ON WOJEWÓDZTWA.Kod = MIEJSCOWOŚCI.KodWoj) INNER JOIN FIRMY ON MIEJSCOWOŚCI.Kod = FIRMY.KodMjc) INNER JOIN DOKUMENTY ON FIRMY.Nr = DOKUMENTY.NrNabywcy) INNER JOIN POZYCJEDOKUMENTU ON DOKUMENTY.NrSprzedawcy=POZYCJEDOKUMENTU.NrSprzedawcy AND DOKUMENTY.NrFaktury=POZYCJEDOKUMENTU.NrFaktury ) INNER JOIN TOWARY ON POZYCJEDOKUMENTU.SmbTow=TOWARY.Symbol WHERE WOJEWÓDZTWA.Nazwa="dolnośląskie" AND DOKUMENTY.NrSprzedawcy=0 GROUP BY Symbol, TOWARY.Nazwa ORDER BY Sum(ilość*cenanetto) DESC;
6. Utworzyć arkusz informujący na jaką kwotę wystawiła faktury Nasza firma (jedna liczba!). UWAGA: W treści zadania podkreślono, ze wynik ma stanowić jedna liczba, dlatego też nie wymieniono w liście pól kwerendy SELECT pola NrSprzedawcy. Dla obliczenia potrzebnej kwoty wystarczy umieszczenie nazwy tego pola w klauzuli GROUP BY. SELECT Sum([Ilość]*[cenanetto]) AS [Sumaryczna KWOTA wystawionych faktur] FROM POZYCJEDOKUMENTU WHERE NrSprzedawcy=0 GROUP BY NrSprzedawcy;
7. Utworzyć arkusz informujący na jaką kwotę przeprowadził transakcje każdy nabywca Naszej firmy z każdym z towarów. UWAGA: Pola Nazwa wymagają kwalifikacji występują zarówno w tabeli FIRMY jak i w tabeli TOWARY. SELECT Nr, FIRMY.Nazwa, Symbol, TOWARY.Nazwa, Sum(ilość*cenanetto) AS Kwota FROM ((FIRMY INNER JOIN DOKUMENTY ON FIRMY.Nr = DOKUMENTY.NrNabywcy) INNER JOIN POZYCJEDOKUMENTU ON DOKUMENTY.NrSprzedawcy = POZYCJEDOKUMENTU.NrSprzedawcy AND DOKUMENTY.NrFaktury = POZYCJEDOKUMENTU.NrFaktury) INNER JOIN TOWARY ON POZYCJEDOKUMENTU.SmbTow = TOWARY.Symbol WHERE DOKUMENTY.NrSprzedawcy=0 GROUP BY Nr, FIRMY.Nazwa, Symbol, TOWARY.Nazwa;
8. Utworzyć arkusz informujący, na jaką kwotę Nasza firma nabyła każdy z towarów z rozbiciem na województwa firm. SELECT Symbol, TOWARY.Nazwa, WOJEWÓDZTWA.Kod, WOJEWÓDZTWA.Nazwa, Sum([ilość]*[cenanetto]) AS KWOTA_zakupu_przez_NF FROM ((((TOWARY INNER JOIN POZYCJEDOKUMENTU ON TOWARY.Symbol = POZYCJEDOKUMENTU.SmbTow) INNER JOIN DOKUMENTY ON POZYCJEDOKUMENTU.NrFaktury=DOKUMENTY.NrFaktury AND POZYCJEDOKUMENTU.NrSprzedawcy= DOKUMENTY.NrSprzedawcy ) INNER JOIN FIRMY ON DOKUMENTY.NrSprzedawcy = FIRMY.Nr) INNER JOIN MIEJSCOWOŚCI ON FIRMY.KodMjc = MIEJSCOWOŚCI.Kod) INNER JOIN WOJEWÓDZTWA ON MIEJSCOWOŚCI.KodWoj = WOJEWÓDZTWA.Kod WHERE DOKUMENTY.NrNabywcy=0 GROUP BY Symbol, TOWARY.Nazwa, WOJEWÓDZTWA.Kod, WOJEWÓDZTWA.Nazwa;
9. Utworzyć arkusz danych informujący o tym, z iloma różnymi towarami każdy z nabywców Naszej firmy miał do czynienia (inaczej mówiąc, należy określić liczność asortymentu towarów kupowanych przez klientów). Zadanie wykonać w dwóch krokach: 1 - utworzyć arkusz o następujących kolumnach: NrNabywcy, SymbolTowaru nie zawierający duplikatów; SELECT DISTINCT NrNabywcy, SmbTow FROM DOKUMENTY INNER JOIN POZYCJEDOKUMENTU ON DOKUMENTY.NrSprzedawcy = POZYCJEDOKUMENTU.NrSprzedawcy AND DOKUMENTY.NrFaktury = POZYCJEDOKUMENTU.NrFaktury WHERE DOKUMENTY.NrSprzedawcy=0;
2 - na podstawie kwerendy z kroku 1 przeprowadzić agregację (funkcja Count) i utworzyć arkusz danych o kolumnach: NazwaNabywcy, Liczność asortymentu. UWAGA: W tym kroku należy dokonać złączenia kwerendy z kroku 1 z tabelą FIRMY. SELECT Nazwa, Count(T3_zad_dod_9_krok_1.SmbTow) AS Liczność_asortymentu FROM T3_zad_dod_9_krok_1 INNER JOIN FIRMY ON T3_zad_dod_9_krok_1.NrNabywcy = FIRMY.Nr GROUP BY Nazwa;
10. Na podstawie wyniku zadania 9 utworzyć tabelę zawierającą 10 klientów o najbardziej szerokich zainteresowaniach (największej liczności asortymentu). UWAGA: Jako wynik zadania pokazana jest tabela utworzona w kwerendzie T3_zad_dod_10. W tabeli zostało zapisanych 13 rekordów ponieważ w czterech ostatnich Liczność_asortymentu była jednakowa równa 7. Dla sprawdzenia można Liczność_asortymenu dopisać do listy pól w kwerendzie tworzącej tabelę. Kwerenda tworząca tabelę wynikową (z polem Liczność dodanym dla kontroli co nie jest niezbędne dla realizacji zadania): SELECT TOP 10 Nazwa, Liczność_asortymentu INTO [10-najlepszych klientów] FROM T3_zad_dod_9_krok_2 ORDER BY [T3_zad_dod_9_krok_2].Liczność_asortymentu DESC;
11. Utworzyć arkusz informujący o liczności asortymentu towarów nabywanych przez Naszą firmę w każdym województwie. Krok 1: SELECT DISTINCT Nazwa, SmbTow FROM (((WOJEWÓDZTWA INNER JOIN MIEJSCOWOŚCI ON WOJEWÓDZTWA.Kod = MIEJSCOWOŚCI.KodWoj) INNER JOIN FIRMY ON MIEJSCOWOŚCI.Kod = FIRMY.KodMjc) INNER JOIN POZYCJEDOKUMENTU ON FIRMY.Nr = POZYCJEDOKUMENTU.NrSprzedawcy) WHERE NrSprzedawcy<>0;
Krok 2: SELECT WOJEWÓDZTWA.Nazwa AS [Nazwa województwa], Count(T3_zad_dod_11_cz_1.SmbTow) AS [Liczba towarów] FROM T3_zad_dod_11_cz_1 INNER JOIN WOJEWÓDZTWA ON T3_zad_dod_11_cz_1.Kod = WOJEWÓDZTWA.Kod GROUP BY WOJEWÓDZTWA.Nazwa;
12. Utworzyć arkusz informujący klientom z ilu województw był sprzedany przez Naszą firmę każdy towar. Krok 1: znalezienie informacji o towarach sprzedawanych przez Nasza firmę w różnych województwach SELECT DISTINCT SmbTow, KodWoj FROM ((POZYCJEDOKUMENTU INNER JOIN DOKUMENTY ON POZYCJEDOKUMENTU.NrSprzedawcy=DOKUMENTY.NrSprzedawcy AND POZYCJEDOKUMENTU.NrFaktury=DOKUMENTY.NrFaktury) INNER JOIN FIRMY ON DOKUMENTY.NrNabywcy = FIRMY.Nr) INNER JOIN MIEJSCOWOŚCI ON FIRMY.KodMjc=MIEJSCOWOŚCI.Kod WHERE DOKUMENTY.NrSprzedawcy=0; Krok 2: Zliczenie kodów województw dla każdego towaru sprzedawanego przez NF SELECT TOWARY.Symbol, TOWARY.Nazwa, Count(T3_zad_dod_12_cz_1.[KodWoj]) AS [Liczba woj w których NF sprz towar] FROM (T3_zad_dod_12_cz_1 INNER JOIN TOWARY ON T3_zad_dod_12_cz_1.SmbTow = TOWARY.Symbol) INNER JOIN WOJEWÓDZTWA ON T3_zad_dod_12_cz_1.KodWoj = WOJEWÓDZTWA.Kod GROUP BY TOWARY.Symbol, TOWARY.Nazwa;
13. Wykonać zestawienie obrotów Naszej Firmy z podziałem na miesiące (1..12) roku zadanego parametrem (użyj funkcji Year i Month). SELECT Month([Data]) AS Miesiąc, Sum([ilość]*[cenanetto]) AS [Obroty miesięczne] FROM DOKUMENTY INNER JOIN POZYCJEDOKUMENTU ON DOKUMENTY.NrSprzedawcy = POZYCJEDOKUMENTU.NrSprzedawcy AND DOKUMENTY.NrFaktury = POZYCJEDOKUMENTU.NrFaktury WHERE DOKUMENTY.NrSprzedawcy=0 GROUP BY Month([Data]), Year([DATA]) HAVING Year([DATA])= [podaj rok:]; Uwaga: Zastosowanie parametru wymaga jedynie podania nazwy pola, które nie istnieje w tabelach określonych w klauzuli FROM, w pozycji, gdzie oczekiwana jest konkretna wartość (np. w wyrażeniu kryterium selekcji). W zadaniu taką nazwa jest [podaj rok:] Po uruchomieniu wyświetlone zostaje okno komunikacyjne. Należy wprowadzić liczbę np. 1992 i zaakceptować Wynik po wprowadzeniu 1992 roku.