MS Access小等价

我有这个工作在Excel中,但它真的需要移动到Access中,因为这是数据库的其余部分所在。

它只是一个表,其中包含Unique_ID,卖方和水果…

1 Chris Orange 2 Chris Apple 3 Chris Apple 4 Sarah Kiwi 5 Chris Pear 6 Sarah Orange 

最后的结果应该由卖方显示,然后列出每个出售的水果(在下面的例子中,罗伯特还没有出售任何水果,我有一个所有卖家的名字的名单,但是这个例子中可以忽略,因为我相信将很容易整合。)他们只会出售最多20个水果。

 Seller 1st 2nd 3rd 4th Chris Orange Apple Apple Pear Sarah Kiwi Orange Robert 

目前,Excel使用Index,Match和Small来返回结果。 Small只是用于Unique_ID来查找第一,第二,第三等等…最小的条目,并与每个卖家的名称相匹配,以build立上述结果。

由于访问没有一个小function,我很茫然! 实际上有超过100,000个logging(最less),超过4000个卖家….他们也不是水果:)

 TRANSFORM First(Sales.Fruit) AS FirstOfFruit SELECT Sales.Seller FROM Sales GROUP BY Sales.Seller PIVOT DCount([id],"sales","seller='" & [seller] & "' and id<=" & [id]); 

如果表名是“销售”,列是“ID”,“卖方”和“水果”

为了更好地理解DCount,使用它是一个SELECT查询而不是交叉表:

 SELECT Sales.ID, Sales.Seller, Sales.Fruit, DCount([id],"sales","seller='" & [seller] & "' and id<=" & [id]) AS N FROM Sales; 

在每一行上,最后一列是DCount结果。 语法是DCount(field,source,expression),所以它计算Sales表(源)中与expression式匹配的ID(字段) – 换句话说,与该行的logging具有相同的销售者,ID < =当前行的ID。 因此,对于Chris的销售,这个数字是1到4,尽pipeSarah在中间销售。

从这个结果中,可以很容易地通过一个交叉表查询,该查询使得该行中的卖方与该列中的N成为一个表 – 按照您希望看到的方式为每个卖方订购销售。 “First”函数为结果的每个行和列find卖家和N的组合的第一个结果。 你可以在这里简单地使用“Max”或“Min” – 任何文本函数。 当然,只有一条logging与卖家行和N列相匹配,但是交叉表查询需要一个函数来评估,并且不能使用“分组依据”作为值来select字段。

我的第一个答案在一个查询中结合了这些步骤 – select和crosstab查询。

希望这可以帮助。