MS Access Small Equivalent

时间:2014-03-27 21:31:24

标签: sql excel 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返回结果。只需在Unique_ID上使用Small即可找到第一个,第二个,第三个,等等......最小的条目,并与每个卖家名称匹配以构建上述结果。

由于Access没有小功能,我不知所措!实际上有超过100,000个记录(最少),超过4000个卖家....他们也不是水果:)。

2 个答案:

答案 0 :(得分:1)

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

表名为“Sales”且列为“ID”,“卖方”和“水果”

答案 1 :(得分:1)

要更好地理解DCount,请使用它是SELECT查询而不是交叉表:

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

在每一行上,最后一列是DCount结果。语法是DCount(字段,源,表达式),因此它所做的是计算Sales表(源)中与表达式匹配的ID(字段) - 换句话说,与该行的记录具有相同的卖方和ID&lt ; =当前行的ID。所以对于克里斯的销售情况来说,尽管萨拉在中间进行了销售,但他们将其编号为1到4。

从这个结果中,可以很容易地进行一个交叉表查询,该查询使行中的卖家和列中的N成为一个表 - 按照您希望的方式为每个卖家按顺序排列销售。 “First”函数为结果的每一行和每列找到卖方和N组合的第一个水果。您可以在这里轻松使用“Max”或“Min” - 任何文本功能。当然,只有一条记录与卖方行和N列匹配,但是交叉表查询需要一个功能来评估,并且不能对选择作为值的字段使用“分组依据”。

我的第一个答案在一个查询中结合了这些步骤 - 选择和交叉表查询。

希望这有帮助。