2016-09-29 271 views
0

我想知道是否有人可以帮我解决这个问题吗?我很困扰这一个:SQL查询/子查询

“显示为每个类型的所有者工作的小时数的总和,但排除具有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

什么是会员?这是否应该排除少于3个业主的任何业主类型? – 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 

因为我我的手机上,请原谅错别字和资本。