MS访问列值的百分比

时间:2015-01-28 14:21:54

标签: ms-access

我有一个名为Test的简单Access表,有两列 - Field1Field2。表中的数据如下所示。

Field1  Field2
1       2
2       2
2       2
2       1
2       1

我试图返回每列中每种数据类型存在的百分比。 (即 - 在Field1中,数字1存在20%,数字2存在80%)

我找到了这个查询,它一次返回一列很有效。

Select Field1, (Count(Field1)* 100 / (select Count(*) From Test)) as fieldA
FROM Test
Group By Field1;

我如何选择两列?我试过这个,但它没有用。

Select 
  Field1, (Count(Field1)* 100 / (select Count(*) From Test)) as fieldA,
  Field2, (Count(Field2)* 100 / (select Count(*) From Test)) as fieldB
FROM Test
Group By Field1;

很抱歉发布这么简单的问题。我几天前刚开始使用Access。

谢谢,

1 个答案:

答案 0 :(得分:2)

执行此操作的一种方法(很多)是执行两个单独的查询(每个字段一个)并将它们包装在外部查询中,如下所示:

select * from (
    SELECT Field1, (Count(Field1)* 100 / (select Count(*) From Test)) as fieldA 
    FROM Test 
    GROUP BY Field1
    ) a 
inner join (
    SELECT Field2, (Count(Field2)* 100 / (select Count(*) From Test)) as fieldB 
    FROM Test 
    GROUP BY Field2
    ) b on a.Field1 = b.Field2

这会得到以下结果:

Field1  fieldA  Field2  fieldB
1       20      1       40
2       80      2       60

这假设两列中都存在相同的数字;如果某个数字只存在于其中一列中,您可能希望将inner join更改为left join

编辑:作为对问题的评论中要求的修改的后续行动(添加更多字段),值得一提的是,由于Access-SQL中的连接语义,可能更容易采取另一种方法,并保存查询每个聚合语句SELECT Field1, (Count(Field1)* 100 / (select Count(*) From Test)) AS fieldA FROM Test GROUP BY Field1;,然后使用可视化查询设计工具构建一个使用以前保存的查询作为源的查询。