获取Access SQL中所有内容的百分比

获取Access SQL中所有内容的百分比,sql,ms-access,Sql,Ms Access,我有一个表,其中包含一个将由给定团队在给定版本中实现的特性列表,并带有一个标志来告诉我该特性是否可测试 样本数据可以是: feature team rel testable 1 1 1 1 2 1 1 1 3 1 1 1 4 1 2

我有一个表,其中包含一个将由给定团队在给定版本中实现的特性列表,并带有一个标志来告诉我该特性是否可测试

样本数据可以是:

feature team rel testable 1 1 1 1 2 1 1 1 3 1 1 1 4 1 2 1 5 1 2 1 6 1 2 0 7 1 3 0 8 1 3 0 9 1 3 1 10 2 1 0 11 2 1 0 12 2 1 0 13 2 2 1 14 2 2 0 15 2 2 0 16 2 3 1 17 2 3 1 18 2 3 0 我试图得到的是,对于每个团队和每个发行版,可测试特性占该团队和发行版的特性总数的百分比是多少

理想情况下,由于我设计结果显示的方式,我希望将其保留为单个SQL查询

我做到了这一点:

SELECT MyTable.team AS team, MyTable.rel AS rel, (COUNT(*)*100 / ( SELECT COUNT(*) FROM MyTable WHERE [MyTable].team = team AND [MyTable].rel = rel ) ) AS result FROM MyTable WHERE MyTable.team IN (1,2) AND MyTable.rel IN (1,2,3) AND MyTable.testable = 1 GROUP BY MyTable.rel, MyTable.team ORDER BY MyTable.team, MyTable.rel 这是我预期的结果,我并不真正关心四舍五入

team rel result 1 1 1 // all are testable for team 1 release 1 1 2 0.66 // 2 out of 3 are testable for team 1 release 2 1 3 0.33 2 1 0 2 2 0.33 2 3 0.66
我的感觉是,我离解决方案不远,但我无法解决它。

我认为一个简单的平均函数可以在这里工作;假设可测试字段中的所有值仅为1或0

噢,去掉where子句中的testable=1

我不确定access是否会隐式转换布尔值。。。因此,通过显式地将值转换为1,0,这将使avg能够工作

SELECT 
    MyTable.team AS team, 
    MyTable.rel AS rel,
    AVG(iif(Testable,1,0)) AS result
FROM MyTable 
WHERE 
    MyTable.team IN (1,2) 
    AND MyTable.rel IN (1,2,3) 
GROUP BY 
    MyTable.rel, 
    MyTable.team 
ORDER BY 
    MyTable.team, 
    MyTable.rel

您可以试试这个。

使用平均“平均”功能。什么数据类型是可测试的?它是Access是/否。。。但我可以把它改成数字。。。这是Access,而不是SQL Server。在任何情况下,如果它是一个布尔列,您仍然需要将其转换为1和0,所以做得很好。这既简单又出色。我一点也没想到这一点,非常感谢
select y.team, y.rel, x.cnt/y.tot as res
from (
select t.team, t.rel, sum(x.cnt) as tot
from (
select team, rel, testable, count(*) as cnt
from table where team in (1,2) and rel in (1,2,3)
group by team, rel, testable) x
join table t on t.team = x.team and t.rel = x.rel
group by team, rel) y