The*_*Man 19 sql-server sql-server-2008
我不确定最好的方法是什么,所以我将描述最终目标是什么,如果计算列是答案,那么请帮助我走这条路,或者更好的路线.
我有两张桌子:
命令
OrderId
PackageId
MediaSpend
TotalAdViews (Computed column)
Run Code Online (Sandbox Code Playgroud)
包
PackageId
BaseAdViews
Run Code Online (Sandbox Code Playgroud)
每个订单都分配了一个包含1000个视图的包,然后您可以购买更多的媒体支出以获得更多视图.我想创建一个名为TotalAdViews的列,它将添加BaseAdViews + MediaSpend.根据我的理解,如果启用持久性,则列不需要在每次查询时重新计算,这可能有助于提高性能.
如何从计算列中的另一个表中获取值?或者请建议另一种方法来实现我的目标.
Gör*_*een 57
我知道这个答案迟了两年,但只是为了帮助任何谷歌搜索并找到这篇文章:
定义用户定义的函数并将其用作计算值是完全合法的.此函数可能包含来自其他表的select语句.
CREATE FUNCTION dbo.getSumAdViews(@packageId int)
RETURNS TABLE
AS
RETURN
select SUM(BaseAdViews) from Packages where PackageId = @packageId
Run Code Online (Sandbox Code Playgroud)
然后在您的计算列中,只需使用表达式 dbo.getSumAdViews(PackageId)
如果只是为了显示目的,为什么不创建一个视图..
select <<add other columns you need>> mediaspend+basicadviews as totaladviews
from
orders o
join
packages p
on p.packageid=o.orderid
Run Code Online (Sandbox Code Playgroud)