SQL是否可以设置包含依赖于另一列的值的列?

SQL是否可以设置包含依赖于另一列的值的列?,sql,schema,Sql,Schema,我有一个表(a),列出了一台机器在一天内创建的所有捆绑包。它列出了创建日期和捆绑的重量。我有一个ID列、一个日期列和一个权重列。我还有一个表(B),其中包含了当天与该机器相关的详细信息。在该表(B)中,我希望有一列列出另一个表(a)中日期匹配的权重之和。因此,如果机器在一天内运行30个包,那么表(a)中的30行都是同一天的。在表(B)中,我将有一行详细说明当天机器的其他信息,加上保存当天创建的捆总重量的列 是否有一种方法可以使表(B)中的合计列在向表(a)添加行时自动进行调整?每次添加捆绑包时,

我有一个表(a),列出了一台机器在一天内创建的所有捆绑包。它列出了创建日期和捆绑的重量。我有一个ID列、一个日期列和一个权重列。我还有一个表(B),其中包含了当天与该机器相关的详细信息。在该表(B)中,我希望有一列列出另一个表(a)中日期匹配的权重之和。因此,如果机器在一天内运行30个包,那么表(a)中的30行都是同一天的。在表(B)中,我将有一行详细说明当天机器的其他信息,加上保存当天创建的捆总重量的列

是否有一种方法可以使表(B)中的合计列在向表(a)添加行时自动进行调整?每次添加捆绑包时,是否可以在表模式本身而不是在SQL语句中执行此操作?如果不是,我需要什么样的SQL语句

Wes

如果需要实时求和(或其他聚合),请在表a上添加一个用于INSERT、UPDATE、DELETE的触发器,该触发器计算要存储在B中的和

否则,添加计算总和的每日作业

请指定您正在使用的数据库。

如果您需要实时求和(或其他聚合),请在表a上添加一个用于插入、更新、删除的触发器,该触发器计算要存储在B中的和

否则,添加计算总和的每日作业


请指定您正在使用的数据库。

这可以通过触发器实现,触发器是在表上发生特定操作(插入/更新/删除)时执行的少量代码。语法因供应商而异(MySQL与Oracle),但语言通常与编写存储过程所用的语言相同


如果您提到DB类型,我可以帮助您了解实际语法

这可以通过触发器来实现,触发器是在表上发生特定操作(插入/更新/删除)时执行的少量代码。语法因供应商而异(MySQL与Oracle),但语言通常与编写存储过程所用的语言相同


如果您提到DB类型,我可以帮助您了解实际语法

您确定不想动态提取此信息,而不是将其存储在单独的表中吗?这似乎间接违反了规范化规则,因为您将在两个不同的位置存储相同的信息。使用动态查询,您将始终确保派生信息是正确的,而不必担心触发器的编码和维护


当然,如果您正在处理大量数据,并且查询时间成为一个问题,那么您可能需要摘要表的快捷方式。但是,总的来说,我建议您不要这样做。

您确定不想动态地提取此信息,而不是将其存储在单独的表中吗?这似乎间接违反了规范化规则,因为您将在两个不同的位置存储相同的信息。使用动态查询,您将始终确保派生信息是正确的,而不必担心触发器的编码和维护


当然,如果您正在处理大量数据,并且查询时间成为一个问题,那么您可能需要摘要表的快捷方式。但是,总的来说,我建议不要这样做。

除非您有性能问题需要这样做,否则这样做是错误的

更好的方法是在数据库中定义一个视图,该视图将按机器聚合每日捆绑包:

 CREATE VIEW MachineDailyTotals
     (MachineID, RunDate, BundleCount, TotalWeight)
 AS SELECT MachineID, RunDate, COUNT(*), SUM(WeightCol)
 FROM BundleListTable
 GROUP BY MachineID, RunDate

这将允许您在实际查看数据之前,始终查看每台机器每天的正确更新总重量,而不会对数据库施加任何负载。您可以对机器表执行简单的外部联接,以获取有关机器的信息,包括每日总计信息,而不必实际将总计存储在任何位置。

这样做是错误的,除非您有需要它的性能问题

更好的方法是在数据库中定义一个视图,该视图将按机器聚合每日捆绑包:

 CREATE VIEW MachineDailyTotals
     (MachineID, RunDate, BundleCount, TotalWeight)
 AS SELECT MachineID, RunDate, COUNT(*), SUM(WeightCol)
 FROM BundleListTable
 GROUP BY MachineID, RunDate

这将允许您在实际查看数据之前,始终查看每台机器每天的正确更新总重量,而不会对数据库施加任何负载。您可以对机器表执行简单的外部联接,以获取有关机器的信息,包括每日总计信息,而无需实际将总计存储在任何位置。

我不确定我的数据库类型是什么,但我使用的是Microsoft SQL Compact Edition,无论它设置了什么默认值。信息存储在一个.sdf文件中。我不确定我的数据库类型是什么,但我使用的是Microsoft SQL Compact Edition,无论它设置了什么默认值。信息存储在一个.sdf文件中。这是一个有效点,我可能需要在某个时候重新考虑。但到目前为止,访问详细捆绑重量的需求非常有限。我将在这个数据库中进行的几乎每一次交互都将涉及每天的总数。我认为存储这些信息以便于访问是一个好主意,而不是每次都动态地计算这些信息。这是一个有效的观点,我可能需要在某个时候重新考虑这一点。但到目前为止,访问详细捆绑重量的需求非常有限。我将在这个数据库中进行的几乎每一次交互都将涉及每天的总数。我认为存储这些信息以便于访问是一个好主意,而不是每次都动态地计算这些信息。视图才是真正的方法。这是我给类似答案留下的评论:这是一个有效的观点,我可能不得不在某个时候重新考虑这一点。但到目前为止,访问详细捆绑重量的需求非常有限。几乎每一次互动我都会在