Sql 跨表条件查询

Sql 跨表条件查询,sql,ms-access,Sql,Ms Access,我正在尝试创建一个返回业务名称的SQL查询。员工是团队和团队的成员,团队和团队是企业的成员 我需要选择一个企业,它的员工是团队的成员,整体上具有某些属性 如何编写SQL来返回成员与高级成员比率为%的业务?前团队A在100名团队成员中只有20名高级员工;因此,它失败了,应该返回团队A所属的业务 我知道我需要根据员工的团队将员工分组,但不知何故,我需要将拥有SENIOR=YES和SENIOR=NO的员工进行统计,并返回他们所属的业务。想法 它们是MS Access表,包含一些敏感信息,但您可以将这些

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

我需要选择一个企业,它的员工是团队的成员,整体上具有某些属性

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

我知道我需要根据员工的团队将员工分组,但不知何故,我需要将拥有SENIOR=YES和SENIOR=NO的员工进行统计,并返回他们所属的业务。想法

它们是MS Access表,包含一些敏感信息,但您可以将这些表视为如下设置: TBL业务:投标,BName tblTeam:TID,TName,TBusRef tblEmployee:EID、EName、ETeamRef、EBusRef、ESENOR

我确实尝试过各种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中有表达式/类似的东西应该给你百分比。您只需再次包装它,即可在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我还没有完整地编写连接,但是您可以轻松地添加它。

也许:

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而不是1吗?我原以为,如果一名员工是资深员工,那么ESenior将为1,否则非资深员工的ESenior将等于0。是的,这是有道理的,但微软认为最好有所不同。他们将校验值存储为-1。我总是忘记这是一个访问问题,噢!这将返回所有B名称,而不仅仅是违规者,并显示0表示百分比或N/a。Access还要求我提供百分比值。。它在做一些事情,但不是我想要的。编辑:刚刚看到这是做什么:这是要求一个百分比,并返回-1的任何业务,恰好达到该百分比。我会尝试包装它。不断学习新东西;不知道可以将FROM参数作为另一个列表提供;我以为那是一张桌子或者什么都没有我想这已经解决了。要适应我的应用程序还需要更多的修改,但方法是可靠的。非常感谢!只要我能,你就会得到一张赞成票=s