【问题标题】:SQL Server 2005 Computed Column Result From Aggregate Of Another Table Field's ValueSQL Server 2005 计算列结果来自另一个表字段值的聚合
【发布时间】:2010-09-15 01:20:50
【问题描述】:

抱歉问题标题太长了。

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

是否可以将一个表中的计算字段的计算结果应用到另一个表中的字段上。

您有一张名为“mug”的桌子,它有一个名为“color”的孩子(这让我的英国人头疼,但供应商来自美国,你要做什么?),而这反过来又有一个孩子称为“大小”。每个表都有一个称为已售出的字段。

每卖出一个特定颜色和尺寸的杯子,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 自己解决问题,还是我不得不去搞砸触发器?

【问题讨论】:

  • 我在一家票务代理工作,在该代理处打印最后一张票的实时号码至关重要,票的种类和价格都有。随时可能需要按演出、类型和价格对门票进行编号。

标签: sql-server-2005 tsql aggregate-functions calculated-columns


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-08
      • 2014-11-13
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      相关资源
      最近更新 更多