2016-09-29 2 views
0

Мне было интересно, может ли кто-нибудь помочь мне с этим запросом? Я очень застрял на этом:SQL-запросы/подзапросы

«Покажите сумму HoursWorked для каждого типа ВЛАДЕЛЬЦА, но исключите услуги сотрудников, имеющих опыт работы с Junior, и исключить любой тип с менее чем тремя членами».

CREATE TABLE OWNER 
(
OwnerID  Int    NOT NULL IDENTITY (1,1)  PRIMARY KEY, 
OwnerName Char(30)  NOT NULL, 
OwnerEmail VarChar(100) NULL, 
OwnerType Char(15)  NOT NULL, 
); 

CREATE TABLE PROPERTY 
(
PropertyID  Int   NOT NULL IDENTITY(1,1)  PRIMARY KEY, 
PropertyName Char(30) NOT NULL, 
Street   Char(20) NOT NULL, 
City   Char(25) NOT NULL, 
State   Char(10) NOT NULL, 
Zip    Char(5)  NOT NULL, 
OwnerID   Int   NOT NULL, 

CONSTRAINT PROP_OWN_FK FOREIGN KEY(OwnerID) 
      REFERENCES OWNER(OwnerID), 
); 

CREATE TABLE GG_EMPLOYEE 
(
EmployeeID  Int   NOT NULL IDENTITY(1,1)  PRIMARY KEY, 
LastName  Char(35) NOT NULL, 
FirstName  Char(35) NOT NULL, 
CellPhone  Char(20) NOT NULL, 
ExperienceLevel Char(25) NOT NULL, 
); 

CREATE TABLE SERVICE 
(
PropertyID  Int   NOT NULL, 
EmployeeID  Int   NOT NULL, 
ServiceDate  Char(15) NOT NULL, 
HoursWorked  Char(5)  NOT NULL, 

CONSTRAINT SERVICE_PK PRIMARY KEY(PropertyID, EmployeeID, ServiceDate), 
CONSTRAINT SER_PRO_FK FOREIGN KEY(PropertyID) 
      REFERENCES PROPERTY(PropertyID),       
CONSTRAINT SER_GG_EMP_FK FOREIGN KEY(EmployeeID) 
      REFERENCES GG_EMPLOYEE(EmployeeID), 
); 
+0

Да, я сделал, они могут быть не совсем точными, но это не имеет значения с подзапросами, не так ли? –

+0

Можете ли вы поделиться результатами с некоторыми данными? – Poonam

+0

Что входит? Предполагается ли исключить любого типа владельца с менее чем тремя владельцами? – Matt

ответ

0
SELECT o.OwnerType, SUM(Cast(HoursWorked as INT)) Sum_HrsWorked 
FROM SERVICE s 
INNER JOIN GG_EMPLOYEE e 
ON s.EmployeeId = e.EmployeeId 
INNER JOIN PROPERTY p 
ON s.PropertyId = p.PropertyId 
INNER JOIN OWNER o 
ON o.OwnerID = p.OwnerID 
WHERE e.ExperienceLevel <> 'JUNIOR' 
Group By o.OwnerType 
HAVING COUNT(OwnerType) > 3 
+0

Спасибо за помощь всем! –

0
Select Tbl1.OwnerName,Sum(TBl2.TTLHoursWorked) as TTLHoursWorked 
From 
(
    Select TBl1.OwnerID,Tbl1.OwnerName,Tbl2.PropertyID,Tbl2.PropertyName 
    From Owner Tbl1 
    Inner Join 
    PROPERTY Tbl2 
    On Tbl1.OwnerID=Tbl2.OwnerID 
)Tbl1 
Inner Join 
(
    Select Tbl2.PropertyID,Cast(HoursWorked as numeric(5,4)) as TTLHoursWorked 
    From (Select * From GG_EMPLOYEE Where ExperienceLevel in(Select ExperienceLevel 
                  From GG_EMPLOYEE 
                  Where ExperienceLevel<>'Junior' 
                  Group by ExperienceLevel Having Count(*)>3))as Tbl1 
    Inner Join SERVICE as Tbl2 
    On Tbl1.EmployeeID=Tbl2.EmployeeID 
)Tbl2 
On Tbl1.PropertyID=Tbl2.PropertyID 
Group by Tbl1.OwnerName 
0
SELECT o.OwnerType, SUM(CAST(s.HoursWorked as INT)) 
FROM 
    owner o 
    INNER JOIN property p 
    On o.ownerid = p.ownerid 
    INNER JOIN service s 
     ON p.propertyid = s.propertyid 
    INNER JOIN GG_employee e 
    On s.employeeid = e.employeeid 
    And e.experiencelevel <> 'junior' 
GROUP BY 
    O.ownertype 
HAVING 
    COUNT(DISTINCT o.ownerid) >= 3 

Пожалуйста, простите опечатки и капитализацию, как я на моем телефоне.