Pregunta

Tengo una tabla que representa los parámetros de un contrato - incluyendo su cambio en el tiempo a través de adendas. La primera adición es una adición "especial" que representa los parámetros que se firmó por primera vez el contrato.

Así es como la mesa debe ser similar a:

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>

Proyectólo es una FK a la mesa de Proyectos cuya clave primaria también se llama Proyectólo.

Quiero DeadlineDate a ser un campo calculado, calculado de esta manera:

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

El problema es que en contract.projectid = projectid la segunda ProjectID tiene que hacer referencia a la fila actual se calcula, no la fila actual en la instrucción SELECT (que es el mismo que contract.projectid).

Estoy usando Firebird. Necesito la columna de la tabla y no en una instrucción SELECT debido a problemas de ORM en la aplicación utilizando la base de datos.

¿Fue útil?

Solución

Sólo prefijar el campo con el nombre de tabla de la tabla actual:

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

Otros consejos

Se puede crear una vista sobre la consulta y utilizarla en el 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top