SQL Server计算列从另一个表中选择

时间:2011-07-28 23:35:58

标签: sql-server sql-server-2008

我不确定最好的方法是什么,所以我将描述最终目标是什么,如果计算列是答案,那么请帮助我走这条路,或者更好路由。

我有两张桌子:

订单

OrderId
PackageId
MediaSpend
TotalAdViews (Computed column)

PackageId
BaseAdViews

每个订单都会分配一个包含1000个视图的包,然后您可以购买更多的媒体支出以获得更多观看次数。我想创建一个名为TotalAdViews的列,它将添加BaseAdViews + MediaSpend。根据我的理解,如果启用持久性,则列不需要在每次查询时重新计算,这可能有助于提高性能。

如何从计算列中的另一个表中获取值?或者请建议另一种方法来实现我的目标。

3 个答案:

答案 0 :(得分:54)

我知道这个答案迟了两年,但只是为了帮助任何谷歌搜索并找到这篇文章:

定义用户定义的函数并将其用作计算值是完全合法的。此函数可能包含来自其他表的select语句。

CREATE FUNCTION dbo.getSumAdViews(@packageId int)
RETURNS TABLE
AS
RETURN
    select SUM(BaseAdViews) from Packages where PackageId = @packageId

然后在您的计算列中,只需使用表达式dbo.getSumAdViews(PackageId)

答案 1 :(得分:16)

您将无法在计算列表达式中使用其他表中的列。这是MSDN documentation的摘录。

  

计算列是根据可以使用同一表中其他列的表达式计算的。

您提到使用计算列的动机是提高性能。有很多restrictions,但indexed view可能会在这里增加价值。

答案 2 :(得分:1)

如果仅用于显示目的,为什么不创建视图..

select <<add other columns you need>> mediaspend+basicadviews as totaladviews
from 
orders o
join
packages p
on p.packageid=o.orderid