Microsoft Access计数每个ID的唯一值

时间:2016-07-19 14:46:13

标签: sql database ms-access

我有一个访问数据库,其id指的是拥有不同尺寸卡车的客户。目前该表看起来像这样:

id.....tire size
1......30
1......30
1......31
1......31
2......32

我想要实现的是这样的:

id.....30.....31.....32
1......2......2......0
2......0......0......0

它计算特定轮胎尺寸的出现次数并将其输入相应的轮胎尺寸栏。

3 个答案:

答案 0 :(得分:2)

为了在编写数据时显示数据,您需要执行交叉表查询。下面的代码应该达到你想要的效果

TRANSFORM Nz(Count([YourTable].[Tire Size]),0) AS [CountOfTire Size]
SELECT [YourTable].[ID]
FROM [YourTable]
GROUP BY [YourTable].[ID]
PIVOT [YourTable].[Tire Size];

答案 1 :(得分:0)

第一步是查询:

select tire_size, COUNT(id) from mytable
GROUP BY tire_size

(我将该查询的“特殊魔术”部分放在大写中以强调。)

在MS-Access查询构建器中,通过单击看起来模糊地像“E”(实际上是希腊语“epsilon”字符)的按钮来访问分组功能,如果我没记错的话。这会向查询构建器网格添加一个新的“分组”行。

这将产生(正如您将很快看到的)轮胎尺寸的逐行结果以及轮胎尺寸的id计数。

其他许多变体都是可能的。阅读讨论此功能的MS-Access在线帮助:他们做得非常好。

基本思想是GROUP BY条款:这表示tire_size的每个不同值构成一个“组”。 (是的,您可以GROUP BY多个列,其中每个唯一值组合形成一个组。)然后,您指定所谓的“域聚合函数,,例如{{ 1}},为每个组生成摘要统计信息。

每个COUNT(), AVG(), SUM()列都必须出现在GROUP BY子句中,中出现的每个其他项都必须是域聚合函数。 (如果您考虑它,那就非常有意义......)

(幸运的是,MS-Access的查询构建器可以很好地“隐藏”所有这些。您可以通过“epsilon”按钮以交互方式构建分组查询。但是查看“SQL视图”会很有用“看看它在SQL术语中做了什么。”

答案 2 :(得分:0)

使用' GROUP BY'聚合

你需要这样的东西:

SELECT 
tyre_size,
count(id) 
FROM tablename 
GROUP BY
tire_size