【问题标题】:How to order the resulting query information being inserting into a table while leaving existing table records on top?如何在将现有表记录保留在顶部的同时将生成的查询信息插入表中?
【发布时间】:2011-05-27 14:06:25
【问题描述】:

我正在尝试将表中的值插入到另一个现有表中,并且仅将我插入的值根据特定列按降序排序,同时将现有记录留在表的顶部。我怎么做?我尝试使用 Order By 语句,但是无论我使用要从中提取的表的列名还是目标表的列名,我都会收到错误消息。这也是使用 DoCmd.RunSQL 在 VBA 中运行的。

这是我现有的查询:

插入到 AllMetersAvgRSSI
(经度、纬度、平均RSSI)
选择 Prem.longitude, Prem.latitude, DataByCol.[平均 RSSI]
来自 [Prem]
剩下 加入 DataByColl ON (Prem.meter_miu_id = DataByColl.[MIU ID])
按 [AvgRSSI] 顺序排序

最终结果

我继续摆弄这个并发现你可以使用订单,就像我在上面显示的那样完全按照我试图做的那样做。我显然遇到的问题是由于我想要排序的列的名称仅从 Avg RSSI 更改为 AvgRSSI。当我将目标表更改为与源表具有相同的字段名称时,它会对传入信息进行排序,同时保留现有信息。我还做了一个测试,我将目标表的名称更改为 AverageRSSI,它的工作方式相同。所以最后是字段的名称仅由导致问题的空格不同。最后的查询是:

插入到 AllMetersAvgRSSI
(经度、纬度、[平均 RSSI])
选择 Prem.longitude, Prem.latitude, DataByCol.[平均 RSSI]
来自 [Prem]
剩下 加入 DataByColl ON (Prem.meter_miu_id = DataByColl.[MIU ID])
按 [平均 RSSI] 顺序排序

【问题讨论】:

  • 在标准 SQL 中,表没有订单 - 唯一定义 ORDER 的时间是您 SELECT 数据。在这方面,我不记得 Access 与该模型有多接近,但我通常建议您确保在表中以列形式存在足够的数据,以支持在 SELECTing 时生成所需的输出 ORDER。

标签: sql vba ms-access-2010


【解决方案1】:

从数据库的角度来看,INSERT 中的排序毫无意义。数据库如何将行放入表中取决于表的底层物理结构,而不是插入的顺序。

也许您的应用程序依赖于按特定顺序排列的自动递增列,该顺序随后将取决于插入顺序,但如果是这种情况,那么我会说您在数据库设计中犯了一个错误不应该是围绕自动递增列设计的业务逻辑。

从您的INSERT 语句中删除ORDER BY,如果您以后需要按特定顺序检索行,请在此处使用ORDER BY

【讨论】:

  • 你在那里做了很多假设。这一系列查询创建的表的最终目的是将其导出到特定文件位置的 .csv 文件,以供另一个程序使用。为了使收集数据并准备好在其他程序中使用的过程更加自动化和用户友好,我试图将信息集中在一起并正确排序,这样用户就不必进入每个结果文件并单独格式化。
  • 如果这很重要,您的导出过程应该处理导出文件中行的排序,而不是在表中人为的排序。如果您需要一些排序列,请在插入期间计算它,而不是尝试以特定顺序插入行。
  • 我不明白你的评论。您说通过“在插入期间计算信息”来订购信息,这是我正在尝试做的,在将信息插入新表之前订购信息。
  • 对传入的数据进行排序与​​拥有一个给出顺序的列并计算该列的值应该是什么有很大不同。同样,表格没有订单。根据您碰巧使用的数据库引擎的底层架构从表中进行选择时,您可能会看到有点一致的顺序,但是当您检索数据时(而不是插入数据时)没有 ORDER BY,您不能保证您获得的订单。如果您必须移植到另一个 RDBMS 或升级 Access,当您得到不同的结果时,您可能会发现自己彻底搞砸了。
  • 插入的顺序根本不重要。数据库表没有顺序。如果您需要订购记录以进行导出,请在那个时候进行,这样可以避免一些挫折。汤姆 H 是当场的。
【解决方案2】:

创建一个临时表,按所需顺序添加第一个结果集。将新值插入表中,查询表以将新结果返回到您的临时表中,选择您的临时表,结果将按照您添加它们的顺序,除非您执行另一个排序。

在显示结果后不要忘记删除临时表。

【讨论】:

  • 我担心这会是答案。对我来说不幸的是,这种类型的答案最近对我来说发生了很多。我想我需要停止在 Access 中做奇怪的事情了。
猜你喜欢
  • 1970-01-01
  • 2011-06-23
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
相关资源
最近更新 更多