【问题标题】:Create New Table with Conditional Assignments - MS Access 2013使用条件分配创建新表 - MS Access 2013
【发布时间】:2014-12-18 22:49:29
【问题描述】:

样本数据:

ORDER    SEQ    IN      OUT
310      1      Jan-20  Jan-22
310      2      Jan-22  Jan-23
207      1      Jan-23  Jan-26
207      2      Jan-26  Jan-27
207      3      Jan-27  Jan-29

我需要创建一个新表,使 ORDER 成为主键,并通过从最低的 SEQ 中检索新的 IN 值来为每个 ORDER 条目分配一个新的 INOUTORDER 和新的 OUT 值来自最大的 SEQ ORDER

例如:

ORDER    IN      OUT
310      Jan-20  Jan-23
207      Jan-23  Jan-29

任何帮助将不胜感激

【问题讨论】:

  • 您是否尝试过创建一个查询,该查询使用 'Totals' 并在 ORDER 上使用 GROUP BY,然后将 MIN 用于 In,MAX 用于 Out?这为您提供了所需的输出。那么你想如何创建新表呢?手动?使用 VBA?使用 SQL?
  • 我会试试的,谢谢。我想使用 SQL 创建新表。我很困惑,总计是指什么?
  • 以下是获取所需结果的 SQL 示例:SELECT tblOrder.Order, Min(tblOrder.InDate) AS MinOfInDate, Max(tblOrder.OutDate) AS MaxOfOutDate FROM tblOrder GROUP BY tblOrder。订单;
  • 创建表的 SQL 示例(以及错误的字段名称!):strSQL = "CREATE TABLE tblOrderSum (OrderNo INT, InDate DATETIME, OutDate DATETIME, PRIMARY KEY (OrderNo))" CurrentProject.Connection.Execute strSQL
  • 谢谢您,这非常有效!表明这解决了我的问题的正确方法是什么?因为这些是 cmets(我是 SO 新手)

标签: sql ms-access primary-key create-table


【解决方案1】:

您似乎想要一个聚合查询:

select [order], min([in]) as [in], max(out) as out
from sample
group by [order];

顺便说一句,orderin 是糟糕的列名称,因为它们是 SQL 保留字。

【讨论】:

  • 感谢您告诉我这是一个聚合查询。我更改了列名,但现在出现以下错误:“查询定义的 SELECT 列表中的别名 'IN1' 引起的循环引用。”
  • 尝试将输出别名命名为其他名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多