5

抱歉,问题标题太长了。

我想我在这个上输了,但机会不大。

是否可以将表中的计算字段的计算作为应用于另一个表中的字段的聚合函数的结果。

IE

你有一张叫做“杯子”的桌子,它有一个叫做“颜色”的孩子(这让我的英国头疼,但供应商来自美国,你要做什么?)而这反过来又有一个孩子叫做“尺寸'。每个表都有一个称为已售出的字段。

每卖出一个特定颜色和尺寸的杯子,size.sold 就会增加 1。

您希望 color.sold 是 SUM size.sold WHERE size.colorid = color.colorid 的聚合

您希望 mug.sold 是 SUM color.sold WHERE color.mugid = mug.mugid 的集合

有没有办法让 mug.sold 和 color.sold 自己解决问题,或者我将不得不使用触发器?

4

2 回答 2

7

您不能让计算列直接引用不同的表,但可以让它引用用户定义的函数。这是实现此类解决方案示例的链接。

http://www.sqlservercentral.com/articles/User-Defined+functions/complexcomputedcolumns/2397/

于 2008-10-03T12:23:13.773 回答
3

不,这是不可能的。计算列只能从同一行上其他字段的值派生。要计算另一个表的聚合,您需要创建一个视图。

如果您的应用程序需要显示统计信息,请询问以下问题:

  1. 真的有必要实时显示吗?如果是这样,为什么?如果确实需要这样做,那么您将不得不使用触发器来更新表。 链接到关于非规范化的简短维基百科文章。触发器将影响表更新的写入性能,并依赖于触发器处于活动状态。
  2. 如果仅出于报告目的需要,您可以在视图或报告中进行计算。
  3. 如果有必要支持频繁的临时报告,您可能会进入数据集市和隔夜 ETL 流程的领域。
于 2008-10-03T12:22:23.027 回答