2

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

我需要选择具有作为团队成员的员工的业务,该团队整体具有某些属性。

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

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

它们是包含一些敏感信息的 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
)

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

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

4

2 回答 2

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
于 2012-05-14T21:30:22.260 回答
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 我还没有完全编写连接,但您可以轻松添加。

于 2012-05-14T19:29:15.703 回答