MS Access SQL 如果行 (n) = 行 (n-1)
MS Access SQL If Row(n) = Row(n-1)
我正在开发一个访问数据库,在其中一个 table 输入中,由于使用了一些旧软件,重复项经常出现在(我最终希望成为的)主键中,原因如下可以在下面看到:
ID | Fluid | Designer | Team |
--------------------------------------------------
A | Water | John | Piping |
A | Water | James | Piping |
B | Steam | Sam | Piping |
B | Steam | Sam | Modeling |
C | Hydrogen | Joe | Piping |
D | Steam | Joe | Piping |
引用 ID 字段的重复查询产生:
ID | Fluid | Designer | Team |
--------------------------------------------------
A | Water | John | Piping |
A | Water | James | Piping |
B | Steam | Sam | Piping |
B | Steam | Sam | Modeling |
不需要自动删除这些重复项,因为重要的是要知道软件模型是否更改了设计者或已转移到另一个团队。因此,这些都是人工审核的。
但是,这个 table 可以包含多达 30 个字段,找到一个非重复项可能会很麻烦。因此,我想要的输出是:
ID | Fluid | Designer | Team |
--------------------------------------------------
A | | John | |
A | | James | |
B | | | Piping |
B | | | Modeling |
我对 SQL 的经验很少,但我花了一些时间使用 visual basic,所以我猜是一些标准,例如:
if(record(n)=record(n-1), display("")
但是根据我对 access 和 SQL 的基本理解,我知道与 visual basic 相关是迄今为止,苹果与橘子的比较。
我是 运行 MS Access 2007-2010。
编辑:
现在研究规范化(抱歉,我是初学者)。关于我的数据库问题的更多细节。还更新了上面最后的table。
我认为我的数据库应该如何工作:
- 从软件导入数据(每天)。这会产生 table 1.
- 使用重复查询查找 ID 列中的所有重复项。这是 table 2.
- 使用查询生成 table,它将显示重复的 ID 以及 未 重复的相应列。
软件中的错误源于这样一个事实:它将新数据修改为已有数据,但只删除了完全相同的数据。如果说,不同的用户在模型上工作,那么它不会更新当前 ID,而是添加一个新行,除了不同的用户外,所有细节都相同。
条件格式
听起来您正在寻找的是一种简单的方法,可以直观地发现类似记录中一长列列的(很少)差异。几年前我有一个非常相似的项目,它生成了一份报告来查看用户对其个人资料所做的更改。我采用的方法是使用 Conditional Formatting 突出显示不同的字段。
在您的比较报告中,我还会使用 group header 按 ID
列进行分组,以便在视觉上轻松区分各组。
对于报表中的比较公式,您可以比较组中字段的 Min()
和 Max()
值。如果最小值和最大值相同,则字段在整个组中匹配。如果没有,您可以使用条件格式突出显示该字段。
我想如果你真的想变得很花哨,你可以扩展这个表达式来使用 running sum 来只突出显示第二条记录中的变化。
隐藏重复值
另一种方法是 hide the duplicate values 用于组中的后续记录。这将涉及相同的分组概念,但在报告中,您会将字段上的 Hide Duplicates
属性 设置为 True
。采用这种方法,您会在列表顶部看到一条完整的记录,但是后续记录的字段只有在值发生变化时才会显示。
我正在开发一个访问数据库,在其中一个 table 输入中,由于使用了一些旧软件,重复项经常出现在(我最终希望成为的)主键中,原因如下可以在下面看到:
ID | Fluid | Designer | Team |
--------------------------------------------------
A | Water | John | Piping |
A | Water | James | Piping |
B | Steam | Sam | Piping |
B | Steam | Sam | Modeling |
C | Hydrogen | Joe | Piping |
D | Steam | Joe | Piping |
引用 ID 字段的重复查询产生:
ID | Fluid | Designer | Team |
--------------------------------------------------
A | Water | John | Piping |
A | Water | James | Piping |
B | Steam | Sam | Piping |
B | Steam | Sam | Modeling |
不需要自动删除这些重复项,因为重要的是要知道软件模型是否更改了设计者或已转移到另一个团队。因此,这些都是人工审核的。
但是,这个 table 可以包含多达 30 个字段,找到一个非重复项可能会很麻烦。因此,我想要的输出是:
ID | Fluid | Designer | Team |
--------------------------------------------------
A | | John | |
A | | James | |
B | | | Piping |
B | | | Modeling |
我对 SQL 的经验很少,但我花了一些时间使用 visual basic,所以我猜是一些标准,例如:
if(record(n)=record(n-1), display("")
但是根据我对 access 和 SQL 的基本理解,我知道与 visual basic 相关是迄今为止,苹果与橘子的比较。
我是 运行 MS Access 2007-2010。
编辑: 现在研究规范化(抱歉,我是初学者)。关于我的数据库问题的更多细节。还更新了上面最后的table。
我认为我的数据库应该如何工作:
- 从软件导入数据(每天)。这会产生 table 1.
- 使用重复查询查找 ID 列中的所有重复项。这是 table 2.
- 使用查询生成 table,它将显示重复的 ID 以及 未 重复的相应列。
软件中的错误源于这样一个事实:它将新数据修改为已有数据,但只删除了完全相同的数据。如果说,不同的用户在模型上工作,那么它不会更新当前 ID,而是添加一个新行,除了不同的用户外,所有细节都相同。
条件格式
听起来您正在寻找的是一种简单的方法,可以直观地发现类似记录中一长列列的(很少)差异。几年前我有一个非常相似的项目,它生成了一份报告来查看用户对其个人资料所做的更改。我采用的方法是使用 Conditional Formatting 突出显示不同的字段。
在您的比较报告中,我还会使用 group header 按 ID
列进行分组,以便在视觉上轻松区分各组。
对于报表中的比较公式,您可以比较组中字段的 Min()
和 Max()
值。如果最小值和最大值相同,则字段在整个组中匹配。如果没有,您可以使用条件格式突出显示该字段。
我想如果你真的想变得很花哨,你可以扩展这个表达式来使用 running sum 来只突出显示第二条记录中的变化。
隐藏重复值
另一种方法是 hide the duplicate values 用于组中的后续记录。这将涉及相同的分组概念,但在报告中,您会将字段上的 Hide Duplicates
属性 设置为 True
。采用这种方法,您会在列表顶部看到一条完整的记录,但是后续记录的字段只有在值发生变化时才会显示。