2014-03-27 114 views
0

我在Excel中工作,但它确实需要移入Access,因为这是数据库其余部分所在的位置。MS Access Small Equivalent

它包含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以查找第一,第二,第三等等最小条目,并与每个卖家名称相匹配以建立上述结果。

由于Access没有一个小功能我很茫然!在现实中,有超过10万条记录(最小)超过4000卖家....他们也没有水果:)

+0

您是否正在尝试重新创建您在Excel中创建的数据透视表到Access中?在你的第二个数据示例中,1,2,3是否与第一个例子中的1,2,3相对应? – Brad

+0

嗨,不,他们没有。 1,2,3 ...意思是第一种水果的销售,第二,第三等...独特的ID总是在销售顺序,因此在Excel中使用小的原因。我已经更新了示例 – Chris

+0

这是一个可怕的数据模型vs列“桔子”,“苹果”,“梨”,这是int。如果有人键入“苹果”与“苹果” - 呃......人类! – SQLMason

回答

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]); 

在表格的名称是“销售”和列“ID”,“卖家“和‘果’

+0

梦幻般的,不是100%确定在DCount上,但是我会阅读并弄清楚你在那里做了什么!只有其他的补充是,我用枢轴后的“IN”排序列 – Chris

+0

嗯,我不明白的是第一个标准......我希望它总是选择每个卖家的第一个记录...如何这是否工作? – Chris

+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(field,source,expression),所以它计算Sales表(源)中与表达式匹配的ID(字段) - 换句话说,与该行的记录具有相同的销售者,ID为< =当前行的ID。因此,对于克里斯的销售情况,尽管莎拉在中间出售,但他们将其数字从1到4。

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

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

希望这会有所帮助。