我有一张代表合约参数的表格 - 包括他们通过附录的时间变化。第一个附录是一个“特殊”附录,代表合同首次签署时的参数。
以下是表格的外观:
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>
ProjectID是Projects表的FK,其主键也称为ProjectID。
我希望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
中,第二个ProjectID必须引用当前正在计算的行,而不是select语句中的当前行(与contract.projectid
相同)。
我正在使用Firebird。我需要表中的列而不是SELECT语句,因为使用数据库的应用程序中存在ORM问题。
答案 0 :(得分:2)
只需在字段前加上当前表的表名:
DeadlineDate COMPUTED BY ((
select first 1 AddMonth(contract.BeginDate, DeadlineMonths)
from addendums contract
where contract.projectid = projects.projectid
order by contract.BeginDate ))
答案 1 :(得分: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