我在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个卖家....他们也不是水果:)。
答案 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列匹配,但是交叉表查询需要一个功能来评估,并且不能对选择作为值的字段使用“分组依据”。
我的第一个答案在一个查询中结合了这些步骤 - 选择和交叉表查询。
希望这有帮助。