SQL - 使用SELECT引用计算列中的当前行

时间:2009-09-23 14:52:36

标签: sql reference row firebird

我有一张代表合约参数的表格 - 包括他们通过附录的时间变化。第一个附录是一个“特殊”附录,代表合同首次签署时的参数。

以下是表格的外观:

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问题。

2 个答案:

答案 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