SQL - referencia de la fila actual en una columna calculada con SELECT
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.
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