2015-12-05 33 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列。

這三個選項在效率和實現複雜性之間有各種權衡。例如,如果對整個表進行查詢,第一個效率可能會低於第二個效率。