2009-09-23 81 views
1

我有一張表,表示合約的參數 - 包括它們隨時間推移而通過附錄進行的更改。第一份附錄是代表合同首次簽署時的參數的「特別」增編。SQL - 使用SELECT計算列中的當前參考行

這裏的表應該如何看起來像:

ID ProjectID BeginDate DeadlineMonths DeadlineDate 
1 20  20-12-2006 24    <computed= 20-12-2006 + 24 months> 
2 23  12-03-2007 12    <computed= 12-03-2007 + 12 months> 
3 20  06-09-2007 36    <computed= **20-12-2006** + 36 months> 

專案編號是FK的項目表,其主鍵也被稱爲專案編號。

我想DeadlineDate是計算領域,像這樣計算:

DeadlineDate COMPUTE BY ((
    select first 1 AddMonth(contract.BeginDate, DeadlineMonths) 
    from addendums contract 
    where contract.projectid = projectid 
    order by contract.BeginDate)) 

的問題是,在contract.projectid = projectid第二專案編號必須引用當前行被計算,而不是當前行中的select語句(這與contract.projectid相同)。

我正在使用火鳥。由於在使用數據庫的應用程序中發生ORM問題,我需要表中的列而不是SELECT語句中的列。

+0

你怎麼知道哪一行是要計算對嗎?爲什麼在你的例子中,你計算行1和行3的值而不是行3的值? – 2009-09-23 14:57:08

+1

由於第1行是ProjectID = 20的項目的第一行,因此它保存了合同啓動的日期。第3行的BeginDate是附錄簽署的日期,但截止日期必須根據合同簽署日期計算。 – Alex 2009-09-23 15:03:58

回答

2

只是當前表的表名前綴領域:

DeadlineDate COMPUTED BY ((
select first 1 AddMonth(contract.BeginDate, DeadlineMonths) 
from addendums contract 
where contract.projectid = projects.projectid 
order by contract.BeginDate)) 
1

你能否爲你的查詢創建一個視圖並在ORM中使用它?

CREATE VIEW v_addendums 
AS 
SELECT ID, ProjectID, BeginDate, DeadlineMonths, 
     (
     SELECT first 1 AddMonth(contract.BeginDate, DeadlineMonths) 
     FROM addendums contract 
     WHERE contract.projectid = a.projectid 
     ORDER BY 
       contract.BeginDate 
     ) 
FROM addendums a 
+0

是的,這應該是訣竅。謝謝! – Alex 2009-09-23 15:23:02