获取Access SQL中所有内容的百分比
我有一个表,其中包含一个将由给定团队在给定版本中实现的特性列表,并带有一个标志来告诉我该特性是否可测试 样本数据可以是: 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获取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
我的感觉是,我离解决方案不远,但我无法解决它。我认为一个简单的平均函数可以在这里工作;假设可测试字段中的所有值仅为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