Tagi: between and

Zadanie 10.

Korzystając z widoku Order_Summary (utworzonego w Zadaniu 6.), napisz kwerendę, która zwróci zamówienia o wartości podobnej (plus minus 10%) do wskazanej (użyj w tym celu zmiennej &suma). Wynik posortuj rosnąco.

Screen przedstawia wynik dla &suma = 50 000.

Schemat: OE, Tabela: Order_Summary (widok), Kolumny: order_id, order_mode, order_date, order_total, Wynik: 7 rows

s10

 

 

 

 

Rozwiązanie

SELECT DISTINCT order_id, order_mode, order_date, order_total
FROM order_summary
WHERE order_total BETWEEN &suma *0.9 AND &suma *1.1
ORDER BY order_total;

[collapse]

Zadanie 19.

Określ, ile produktów (product_id) zawiera które zamówienie; wynik opisz przedziałami: „Jeden lub dwa”, „Od trzech do pięciu”, „Od sześciu do dziesięciu”, „Powyżej dziesięciu”.

Schemat: OE, Tabela: Order_Items, Kolumny: order_id, product_id, Wynik: 105 rows

p19

 

 

 

 

 

Rozwiązanie

SELECT order_id,
CASE
WHEN COUNT(product_id) <=2 THEN 'Jeden lub dwa'
WHEN COUNT(product_id) BETWEEN 3 AND 5 THEN 'Od trzech do pięciu'
WHEN COUNT(product_id) BETWEEN 6 AND 10 THEN 'Od sześciu do dziesięciu'
WHEN COUNT(product_id) >10 THEN 'Powyżej dziesięciu'
END as Produkty
FROM order_items
GROUP BY order_id
ORDER BY order_id;

[collapse]

 

Zadanie 7.

Korzystając z tabeli Employees (HR), stwórz zestawienie pracowników, tak jak przedstawiono na screenie, dla pracowników zarabiających między 10 a 14 tysięcy; wynik posortuj według zarobków (malejąco).

Schemat: HR, Tabela: Employees, Kolumny: First_Name, Last_name, Hire_Date, Salary, Wynik: 16 rows

07

 

 

Rozwiązanie

SELECT first_name||' '||last_name||' jest z nami od '||to_char(hire_date, 'DD.MM.YYYY')||' i zarabia '||salary as Zestawienie
FROM Employees
WHERE Salary BETWEEN 10000 AND 15000
ORDER BY Salary DESC;

[collapse]

Zadanie 4.

Z tabeli Job_History wybierz:

a) pracowników, którzy zostali zatrudnieni między rokiem 2005 a 2006

b) pracowników, którzy odeszli przed 2002 rokiem

c) pracowników o job_id równym AC_ACCOUNT lub ST_CLERK nie należą do departamentu o numerze 110

Schemat: HR, Tabela:  Job-History, Kolumny: Start_Date, End_Date, Job_ID, Department_ID, Wynik: a) 2 rows b) 2 rows c) 3 rows

Rozwiązanie

a) SELECT *
FROM job_history
WHERE START_DATE BETWEEN '05/01/01' AND '06/12/31' ; --RR/MM/DD

b) SELECT *
FROM job_history
WHERE END_DATE <= '01/12/31' ;

c) SELECT *
FROM job_history
WHERE (JOB_ID  = 'AC_ACCOUNT' OR JOB_ID = 'ST_CLERK') AND DEPARTMENT_ID <> 110;

[collapse]

Zadanie 2.

Z tabeli Employees wybierz:

a) wszystkich o job_id równym SA_REP

b) z wynagrodzeniem pomiędzy 2000 a 5000

c) zatrudnieni przed rokiem 2003

d) tych, którzy nie pracują w departamentach o ID 50 oraz 80

e) tych, których numer telefonu zawiera dwie cyfry 7 (w dowolnym miejscu)

Schemat: HR, Tabela: Employees, Kolumny: Job_ID, Salary, Hire_Date, Department_ID, Phone_Number, Wynik: a) 30 rows, b) 49 rows c) 8 rows d) 27 rows e) 6 rows

Rozwiązanie

a) SELECT *
FROM EMPLOYEES
WHERE job_id = 'SA_REP';

b) SELECT *
FROM EMPLOYEES
WHERE salary BETWEEN 2000 AND 5000;

c) SELECT *
FROM EMPLOYEES
WHERE HIRE_DATE < '03/01/01'; --RR/MM/DD

d) SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID <> 50 AND DEPARTMENT_ID <> 80;

e) SELECT *
FROM EMPLOYEES
WHERE PHONE_NUMBER LIKE '%7%7%';

[collapse]

Zadanie 11.

Używając widoku Order Subtotals, napisz kwerendę, która zwróci zamówienia o wartości podobnej (plus minus 10%) do wskazanej (zadeklaruj w tym celu zmienną @sum). Wynik posortuj rosnąco.

Screen przedstawia część wyniku dla @sum = 400.

Baza: Northwind, Tabela (widok): dbo.Order Subtotals, Kolumny: OrderID, Subtotal, Wynik: 38 rows (dla @sum = 400)

s11

 

 

 

 

 

 

Rozwiązanie

DECLARE @sum as INT = 400;

SELECT OrderID, Subtotal
FROM dbo.[Order Subtotals]
WHERE Subtotal BETWEEN 0.9*(@sum) AND 1.1*(@sum)
ORDER BY Subtotal;

[collapse]