SQL - Riferimento riga corrente in una colonna calcolata con SELECT
Domanda
Ho una tabella che rappresenta i parametri di un contratto - compreso il loro cambiamento nel tempo attraverso integrazioni. Il primo addendum è un addendum "speciale" che rappresenta i parametri in cui il contratto è stato firmato prima.
Ecco come la tabella dovrebbe essere simile:
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 è un FK al tavolo progetti la cui chiave primaria è anche chiamato ProjectID.
Voglio DeadlineDate di essere un campo calcolato, calcolato in questo modo:
DeadlineDate COMPUTE BY ((
select first 1 AddMonth(contract.BeginDate, DeadlineMonths)
from addendums contract
where contract.projectid = projectid
order by contract.BeginDate ))
Il problema è che in contract.projectid = projectid
secondo ProjectID deve fare riferimento alla riga corrente viene calcolato, non riga corrente select (che è lo stesso come contract.projectid
).
sto usando Firebird. Ho bisogno della colonna nella tabella e NON in un'istruzione SELECT a causa di problemi ORM nell'applicazione utilizzando il database.
Soluzione
Proprio precedere il campo con nome della tabella della tabella corrente:
DeadlineDate COMPUTED BY ((
select first 1 AddMonth(contract.BeginDate, DeadlineMonths)
from addendums contract
where contract.projectid = projects.projectid
order by contract.BeginDate ))
Altri suggerimenti
Si può creare una vista su vostra richiesta e utilizzarlo nel 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