【问题标题】:MS Access Small EquivalentMS Access 小型等效
【发布时间】:2014-03-27 21:31:23
【问题描述】:

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

它只是一个包含 Unique_ID、Seller 和 Fruit 的表......

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 使用索引、匹配和小来返回结果。 Small 仅用于 Unique_ID 以查找第 1、2、3 等...最小的条目,并与每个卖家名称匹配以构建上述结果。

由于 Access 没有 Small 功能,我很茫然!实际上有超过 100,000 条记录(最少),超过 4000 名卖家......他们也不是水果 :)

【问题讨论】:

  • 您是否正在尝试将您在 Excel 中创建的数据透视表重新创建到 Access 中?在您的第二个数据示例中,1、2、3... 标题是否对应于第一个示例中的 1、2、3?
  • 嗨,他们没有。 1, 2, 3... 表示售出的第 1 个水果,第 2 个,第 3 个等... 唯一的 ID 始终按售出顺序排列,因此在 excel 中使用 small 的原因。我已经更新了示例
  • 这是一个可怕的数据模型,而不是具有 int 的“Orange”、“Apple”、“Pear”列。如果有人输入“apples”和“apple”怎么办——呃……人类!
  • 哈哈,这不可能发生,因为它链接到存在数据验证的 Excel :)

标签: sql excel ms-access


【解决方案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”、“Seller”和“Fruit”

【讨论】:

  • 太棒了,在 DCount 上不是 100% 肯定,但我会阅读并弄清楚你在那里做了什么!唯一的补充是我在枢轴之后使用“IN”对列进行排序
  • 嗯,我不明白的是第一个标准...我希望它始终为每个卖家选择第一个记录...这是如何工作的?
  • 交叉表查询需要为值选择的字段的公式 - 它不能是分组依据。所以对于文本数据,我只使用“first” - 通常它会“sum”用于数字数据,这当然不适用于文本。
  • 问题主要是为什么它并不总是返回第一条记录?例如 First 行等于 Chris 我原以为总是会返回橙色,但是当您到达第二个 DCount 时,它知道要查找第一个条目 - 1 inessence 并返回 Apple
【解决方案2】:

为了更好地理解 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) 所以它的作用是计算销售表(源)中匹配表达式的 ID(字段) - 换句话说,与该行的记录具有相同的卖家和 ID

根据该结果,很容易进行交叉表查询,该查询创建一个表,其中行中包含卖家,列中包含 N - 按照您希望查看的方式为每个卖家排序。 “第一个”函数为结果的每一行和每一列查找卖家和 N 组合的第一个水果。您可以在这里轻松地使用“Max”或“Min”——任何文本函数。当然,只有一条记录匹配卖家行和N列,但交叉表查询需要一个函数来评估,不能对选择为Value的字段使用“Group by”。

我的第一个答案将这些步骤(选择和交叉表查询)组合在一个查询中。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 2015-06-28
    相关资源
    最近更新 更多