2015-12-05 34 views
1

下面的代码工作正常 选择date_trans,time_trans,价格,价格 - 滞后(价格,1,0)在(由date_tans ASC顺序,time_trans ASC)作为pChng 从dbo.A_1LAG函数产生窗口函数错误

但是,如果我尝试改变表格并添加一个具有类似代码的列,我得到一个错误。它接缝我的窗口函数是一个order by子句里面,所以我不明白为什么错误

Alter table dbo.A_1 Add pChng as price - lag(price,1,0) over(order by date_trans ASC, time_trans ASC) 
+1

对不起,你不能在计算列中使用窗口函数。以下是MSDN页面,详细介绍您可以做什么以及不可以做什么。 https://technet.microsoft.com/en-us/library/ms191250(v=sql.105).aspx –

回答

4

您不能添加,作为一个计算列。

你既可以

  • 添加一个接受date_trans和time_trans参数,然后返回前行和参考的价格,一个标量UDF的计算列。
  • 或者只是使用您的lag列创建视图。
  • 或者使用触发器自己维护pChng列。

这三个选项在效率和实现复杂性之间有各种权衡。例如,如果对整个表进行查询,第一个效率可能会低于第二个效率。