Нахождение сотрудников по заданным параметрам (по рождению, проживанию, наличию сверстника). Планы объемов продаж для каждой территории региона US

Страницы работы

4 страницы (Word-файл)

Содержание работы

1) Кто из сотрудников родился позже, чем Simon Rapier (вывести фамилию, имя, должность, дату рождения)

SELECT FirstName, LastName, MiddleName, HumanResourses.Employee.Title, BirthDate

FROM

HumanResourses.Employee

JOIN

Pesron.Contact

ON

HumanResourses.Employee.ContactID=Person.Contact.ContactID

WHERE

HumanResourses.Employee.BirthDate >

(SELECT HumanResourses.Employee.BirthDate

FROM

HumanResourses.Employee

JOIN

Person.Contact

ON

HumanResourses.Employee.ContactID=Person.Contact.ContactID

WHERE

LastName=’Rapier’

AND FirstName=’Simon’)

8 строк, можно только подзапросами или подзапрос вместе с объединением, только объединением нельзя.

2) Найти пары сотрудников, проживающих в одном городе (вывести идентификационные номера сотрудников и название города, отсортировать по идентификационным номерам сотрудников)

SELECT A.EmployeeID, B.EmployeeID, C.City

FROM

(HumanResourses.Employee A

JOIN

HumanResourses.Employee EA1

ON

A.EmployeeID=EA1.EmployeeID

JOIN

Person.Address C

ON

EA1.AddressID=C.AddressID)

JOIN

(HumanResourses.Employee B

JOIN

HumanResourses.EmployeeAddress EA2

ON

B.EmployeeID=EA2.EmployeeID

JOIN

Person.Address D

ON

EA2.AddressID=D.AddressID)

ON

C.City=D.City

WHERE A.EmployeeID > B.EmployeeID

ORDER BY A.EmployeeID, B.EmployeeID

2994 строки, нельзя только подзапросом (можно некоторые объединения заменить подзапросами)

3) Найти сотрудников, имеющих хотя бы одного сверстника

СПОСОБ 1:

SELECT A.EmployeeID, A.BirthDate

FROM HumanResourses.Employee A

WHERE Exists

(SELECT (B.BirthDate)

FROM HumanResourses.Employee B

WHERE A.EmployeeID>B.EmployeeID

AND A.BirthDate=B.BirthDate)

СПОСОБ 2:

SELECT A.EmployeeID, A.BirthDate

FROM HumanResourses.Employee A

JOIN HumanResourses.Employee B

ON A.BirthDate=B.BirthDate

WHERE A.EmployeeID>B.EmployeeID

11 строк

4) Для заказов на общую сумму больше 200 000 получить список идентификационных номеров заказов, их стоимость, а так же фамилию, имя, отчество клиента и сотрудника, оформившего заказ

SELECT SalesOrderID, TotalDue, SP.FirstName, SP.MiddleName, SP.LastName, C.FirstName, C.MiddleName, C.LastName

FROM

Sales.SalesOrderHeader

JOIN

Person.Contact C

ON

C.ContactID=Sales.SalesOrderHeader.ContactID

JOIN

HumanResourses.Employee

ON Sales.SalesOrderHeader.SalesPersonID=HumanResourses.Employee.EmployeeID

JOIN

Person.Contact SP

ON

SP.ContactID= HumanResourses.Employee.ContactID

WHERE TotalDue > 200000

4 строки, только объединение

5) Каков диапазон планов объемов продаж для каждой территории региона US

СПОСОБ 1:

SELECT MIN(SalesQuota), MAX(Sales.Quota), Sales.SalesPerson.TerritoryID

FROM

Sales.SalesPerson

JOIN

Sales.SalesTerritory

ON

Sales.SalesPerson.TerritoryID=Sales.SalesTerritory.TerritoryID

WHERE CountryRegionCode=’US’

GROUP BY Sales.SalesPerson.TerritoryID

СПОСОБ 2:

SELECT MIN(SalesQuota), MAX(Sales.Quota), Sales.SalesPerson.TerritoryID

FROM

Sales.SalesPerson

WHERE Sales.SalesPerson.TerritoryID IN

(SELECT Sales.SalesTerritory.TerritoryID

FROM Sales.SalesTerritory

WHERE CountryRegionCode=’US’

GROUP BY Sales.SalesPerson.TerritoryID

5 строк

6) Вывести список названий товаров, цена которых превышает 10 000 или которых было заказано на сумму больше 25 000 в один заказ

СПОСОБ 1:

SELECT P.Name, P.ProductID

FROM Production.Product P

JOIN

Sales.SalesOrderDetale O

ON

P.ProductID=O.ProductID

WHERE UnitPrice > 10000 OR LineTotal > 25000

СПОСОБ 2:

SELECT P.Name, P.ProductID

FROM Production.Product P

WHERE P.ProductID IN

(SELECT O.ProductID

FROM Sales.SalesOrderDetail O

WHERE UnitPrice > 10000

UNION

SELECT O.ProductID

FROM

Sales.SalesOrderDetail O

WHERE LineTotal > 25000)

3 строки

7) Вывести список сотрудников, принявших заказ на сумму, составляющую 50% и более от их плана продаж

СПОСОБ 1:

SELECT DISTINCT C.ContactID, C.FirstName, C.MiddleName, C.LastName

FROM Person.Contact C

WHERE C.ContactID IN

(SELECT E.ContactID

FROM HumanResourses.Employee E

WHERE E.EmployeeID IN

(SELECT O.SalesPersonID

FROM Sales.SalesOrderHeader O

WHERE O.TotalDye >=0.5*

(SELECT SP.SalesPerson SP

WHERE SP.SalesPersonID=O.SalesPersonID)))

СПОСОБ 2:

SELECT DISTINCT C.ContactID, C.FirstName, C.MiddleName, C.LastName

FROM Person.Contact C

JOIN

HumanResourses.Employee E

ON

E.ContactID=C.ContactID

JOIN

Sales.SalesOrderHeader O

ON

O.SalesPersonID=E.EmployeeID

WHERE O.TotalDue >= 0.5*

(Select SP.SalesQuota

FROM

Sales.SalesPerson SP

WHERE SP.SalesPersonID=O.SalesPersonID)

11 строк, подзапросы или подзапросы+объединение, только объединением нельзя

8) Вывести список руководителей, родившихся после 01 января 1940 года, у которых есть служащие, опережающие личный план продаж

СПОСОБ 1:

SELECT DISTINCT B.EmployeeID

FROM

HumanResourses.Employee B

JOIN

HumanResourses.Employee E

ON

E.ManagerID=B.EmployeeID

JOIN

Sales.SalesPerson SP

ON

E.EmployeeID=SP.SalesPErsonID

WHERE E.BirthDate > ’01.01.1940’

AND SP.SalesYTD >=SP.SalesQuota

СПОСОБ 2:

SELECT DISTINCT B.EmployeeID

FROM

HumanResourses.Employee B

WHERE B.EmployeeID IN

(SELECT E.ManagerID

FROM HumanResourses.Employee E

WHERE E.EmployeeID IN

(SELECT SP.SalesPersonID

FROM Sales.SalesPerson SP

WHERE E.BirthDate > ’01.01.1940’

AND SP.SalesYTD >= SP.SalesQuota))

3 строки

9) Вывести список имеющихся товаров от компании Cruger Bike Company

СПОСОБ 1:

SELECT P.Product, P.Name

FROM Production.Product P

WHERE P.ProductID IN

(SELECT PV.ProductID

FROM Purchasing.ProductVendor PV

WHERE PV.VendorID IN

(SELECT V.VendorID

FROM Purchasing.Vendor V

WHERE V.Name = ‘Cruger Bike Company’

СПОСОБ 2:

SELECT P.Product, P.Name

FROM Production.Product P

JOIN

Purchasing.ProductVendor PV

ON

P.ProductID=PV.ProductID

JOIN

Purchasing.Vendor V

ON

PV.VendorID=V.VendorID

WHERE V.Name = ‘Cruger Bike Company’

23 строки

10) Определить, есть ли территория, суммарный план продаж сотрудников которой превышает 0,5% стоимости всех заказов

SELECT ST.TerritoryID

FROM Sales.SalesTerritory ST

WHERE Exists

(SELECT SUM(SalesQuota)

FROM Sales.SalesPerson SP

GROUP BY SP.TerritoryID

HAVING SUM(SalesQuota) > 0.005* (

SELECT SUM(TotalDue)

FROM Sales.SalesOrderHeader

)

AND ST.TerritoryID=SP.TerritoryID

)

1 строка, возможно только подзапросом

Похожие материалы

Информация о работе