Kategoria: Poziom podstawowy

Zadanie 30.

Jakie wyniki otrzymamy po uruchomieniu poniższego kodu?

a) SELECT 2 * 2,5

b) SELECT OrderID OrderDate FROM dbo.Orders;

Baza: Northwind

Rozwiązanie


a) 30a

Do określania miejsc dziesiętnych służy kropka, nie przecinek. Powyższy kod inaczej można zapisać jako SELECT (2 * 2), 5. Jeśli chcemy przemnożyć wartości, trzeba zamiast przecinka wstawić kropkę.

b) 30b

Zamiast spodziewanych dwóch kolumn, dostajemy jedną, w dodatku nazwa się nie zgadza. Dzieje się tak dlatego, że nie ma przecinka pomiędzy OrderID a OrderDate, co oznacza nadanie aliasu. Zapis taki jest jest równoważny z "SELECT OrderID as OrderDate".

[collapse]

Zadanie 29.

Dla każdego klienta pokaż datę oraz numer pierwszego złożonego zamówienia.

Baza: Northwind, Tabela: dbo.Orders, Kolumny: CustomerID, OrderID, OrderDate, Wynik: 89 rows

p29

Rozwiązanie

SELECT CustomerID, MIN(OrderID) as FirstOrder, MIN(OrderDate) as FirstOrderDate
FROM dbo.Orders
GROUP BY CustomerID;

[collapse]

Zadanie 28.

Podsumuj pracę przewoźników: podlicz, ile zamówień obsłużyli w każdym roku. W wyniku zaznacz, na którym miejscu jest dany przewoźnik w ilości obsłużonych zamówień.

Baza: Northwind, Tabele: dbo.Orders, dbo.Shippers, Kolumny: CompanyName, OrderDate, ShipVia, ShipperID, Wynik: 9 rows

37

Rozwiązanie

SELECT ROW_NUMBER() OVER(PARTITION BY YEAR(O.OrderDate) ORDER BY COUNT(*) DESC) as Nr, S.CompanyName, YEAR(O.OrderDate) as Year, COUNT(*) as Orders
FROM dbo.Orders as O
JOIN dbo.Shippers as S on O.ShipVia = S.ShipperID
GROUP BY S.CompanyName, YEAR(O.OrderDate)
ORDER BY Year, Orders DESC;

[collapse]

Zadanie 27.

Dla klientów z Francji wyświetl nazwę firmy, osobę kontaktową oraz numer telefonu; numer powinien być rozdzielony za pomocą myślników, zamiast kropek.

Baza: Northwind, Tabela: dbo.Customers, Kolumny: CompanyName, ContactName, Phone, Wynik: 11 rows

35

Rozwiązanie

SELECT CompanyName, ContactName, REPLACE(Phone, '.', '-') as Phone
FROM dbo.Customers
WHERE Country = 'France'
ORDER BY CompanyName;

[collapse]

Zadanie 26.

Korzystając z tabeli Customers, dla poszczególnych regionów i miast w USA określ numer kierunkowy telefonu.

Baza: Northwind, Tabela: dbo.Customers, Kolumny: Region, City, Phone, Wynik: 12 rows

34

Rozwiązanie

SELECT DISTINCT Region, City, SUBSTRING(Phone, 2, 3) as Kierunkowy
FROM dbo.Customers
WHERE Country = 'USA'
ORDER BY Region, City;

[collapse]

Zadanie 25.

Dla wszystkich klientów z Wielkiej Brytanii (UK) pokaż nazwę firmy, osobę kontaktową, numer telefonu oraz fax (jeśli istnieje), w formie jaką przedstawiono na screenie.

Baza: Northwind, Tabela: dbo.Customers, Kolumny: CompanyName, ContactName, Phone, Fax, Wynik: 7 rows

33

Rozwiązanie

SELECT CompanyName, ContactName, CONCAT(Phone, ', Fax:'+ Fax) as 'Phone Number'
FROM dbo.Customers
WHERE Country = 'UK'
ORDER BY CompanyName;

[collapse]

Zadanie 24.

Wyświetl wszystkich klientów (nazwa firmy, osoba kontaktowa i numer telefonu), którzy nie podali swojego numeru Fax.

Baza: Northwind, Tabela: dbo.Customers, Kolumny: CompanyName, ContactName, Phone, Fax, Wynik: 22 rows

32

Rozwiązanie

SELECT CompanyName, ContactName, Phone
FROM dbo.Customers
WHERE Fax IS NULL
ORDER BY CompanyName;

[collapse]

Zadanie 23.

Policz, ile zamówień obsłużył każdy z pracowników; wyniki opisz jako przedziały: mniej niż 50, między 50 a 100, więcej niż 100.

Baza: Northwind, Tabela: dbo.Orders, Kolumny: EmployeeID, OrderID, Wynik: 9 rows

31

Rozwiązanie

SELECT EmployeeID,
CASE
WHEN COUNT(OrderID) < 50 THEN 'Mniej niż 50'
WHEN COUNT(OrderID) BETWEEN 50 AND 100 THEN 'Między 50 a 100'
WHEN COUNT(OrderID) > 100 THEN 'Więcej niż 100'
END AS Zamowienia
FROM dbo.Orders
GROUP BY EmployeeID
ORDER BY EmployeeID;

[collapse]

Zadanie 22.

Dla pracowników o id równym 1, 2, 3, 6, 8 oraz 9 ustal tytuły grzecznościowe (pan lub pani). Jeśli tytuł grzecznościowy jest inny, zostaje oryginalny. Imię i nazwisko powinno znaleźć się w jednej kolumnie.

Baza: Northwind, Tabela: dbo.Employees, Kolumny: EmployeeID, TitleOfCourtesy, FirstName, LastName, Wynik: 6 rows

30

Rozwiązanie

SELECT EmployeeID,

CASE TitleOfCourtesy

WHEN 'Mr.' THEN 'Pan'

WHEN 'Ms.' THEN 'Pani'

ELSE TitleOfCourtesy

END AS Tytuł,

(FirstName +' '+ LastName) as Pracownik

FROM dbo.Employees
WHERE EmployeeID IN(1, 2, 3, 6, 8, 9)
ORDER BY EmployeeID;

[collapse]

Zadanie 21.

Dla klientów o ID ALFKI, ISLAT, SAVEA stwórz zestawienie, pokazujące ich uporządkowane i ponumerowane według wartości zamówienia.

Baza: Northwind, Tabele: dbo.Orders, dbo.Order Details, Kolumny: CustomerID, OrderID, UnitPrice, Quantity, Wynik: 151 rows

26

Rozwiązanie

SELECT O.CustomerID, O.OrderID, (OD.UnitPrice * OD.Quantity) as OrdVal, ROW_NUMBER() OVER(PARTITION BY O.CustomerID ORDER BY (OD.UnitPrice * OD.Quantity) DESC ) as num

FROM dbo.Orders as O JOIN dbo.[Order Details] as OD on O.OrderID = OD.OrderID WHERE O.CustomerID IN('ALFKI', 'ISLAT', 'SAVEA')

ORDER BY O.CustomerID, OrdVal DESC;

[collapse]
« Starsze wpsiy