跨表标准查询

时间:2012-05-14 18:57:51

标签: sql ms-access

我正在尝试创建一个返回商家名称的SQL查询。员工是团队的成员,团队,团队和团队的成员都是企业的成员。

我需要选择拥有员工的业务,这些员工是团队成员,具有一定的属性。

如何编写SQL以返回成员与高级成员比率为%的企业?前A队在100名队员中只有20名高级员工;所以它失败了,应该归还A队所属的业务。

我知道我需要根据他们的团队将员工聚集在一起,但不知何故需要计算对SENIOR = NO的SENIOR = YES的员工,并返回他们所属的业务。想法?

它们是MS Access表,其中包含一些敏感信息,但您可以将表格视为如下设置:

tblBusiness:BID,BName
tblTeam:TID,TName,TBusRef
tblEmployee:EID,EName,ETeamRef,EBusRef,ESenior

我真的尝试过各种各样的SQL:我已经完成了从嵌套SQL到重度聚合到包含count的表达式的所有工作。最接近的(我认为)我得到的是:

SELECT tblBuisiness.BName FROM tblBuisiness
GROUP BY BName HAVING (
COUNT(SELECT DISTINCT tblEmployee.ETeamRef FROM tblEmployee WHERE ESenior=-1)
/
COUNT(SELECT DISTINCT tblEmployee.ETeamRef FROM tblEmployee)
< 0.5
)

现在这个可能有语法错误(在剪贴板上),但我经历了100x,我得到的最接近的是“不能在agregate中表达”COUNT()/&lt; 0.5“”

如果Business1的TeamA有20位高级成员和80位普通成员,则此查询将返回Business1。

2 个答案:

答案 0 :(得分:2)

也许:

SELECT * 
FROM (
  SELECT 
    e.EBusRef, 
    Count(e.EID) AS EmpCount, 
    Sum(Abs([ESenior])) AS Senior, 
    [Senior]/([EmpCount]/100) AS [%Senior]
  FROM tblEmployee AS e
  GROUP BY e.EBusRef) q
WHERE q.[%Senior]<=50

答案 1 :(得分:0)

这样的东西应该给你百分之。您只需要再次包装它以过滤SeniorPercentage字段

select 
    B1.BName,
    SeniorPercentage = ((select count(1) from tblEmployee E1 inner join tblTeam T1 where T1.TBusRef = B1.BID and E1.ESenior = 1) / (select count(1) from tblEmployee E2 inner join tblTeam T2 where T2.TBusRef = B1.BID))
From
    tblBusiness B1

PS我没有完全写入连接,但你可以轻松添加它。