Question

J'ai une table qui représente les paramètres d'un contrat - y compris leur changement au fil du temps par addendas. Le premier additif est un additif « spécial » représentant les paramètres lorsque le contrat a été signé.

Voilà comment la table devrait ressembler à:

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 est FK à la table des projets dont la clé primaire est également appelé ProjectID.

Je veux DeadlineDate être un champ calculé, calculé comme ceci:

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

Le problème est que, dans la seconde contract.projectid = projectid ProjectID doit faire référence à la ligne de courant étant calculée, et non la ligne courante dans l'instruction de sélection (qui est le même que contract.projectid).

J'utilise Firebird. J'ai besoin de la colonne dans la table et non pas dans une instruction SELECT en raison de problèmes ORM dans l'application à l'aide de la base de données.

Était-ce utile?

La solution

préfixe Seul le champ avec le nom de la table de la table en cours:

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

Autres conseils

Pouvez-vous créer une vue sur votre requête et de l'utiliser dans le 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top