Frage

Ich habe eine Tabelle, welche die Parameter einen Vertrag darstellt - einschließlich ihrer Veränderung im Laufe der Zeit durch Nachträge. Der erste Nachtrag ist ein „besonderer“ Addendum, die die Parameter, wenn der Vertrag wurde zum ersten Mal unterzeichnet.

Hier ist, wie die Tabelle aussehen sollte:

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 ist ein FK auf die Projekte Tabelle, deren Primärschlüssel auch ProjectID genannt.

Ich möchte DeadlineDate ein berechnetes Feld sein, berechnet wie folgt:

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

Das Problem ist in contract.projectid = projectid dass die zweiten ProjectID die aktuelle Zeile wird berechnet Referenz hat, nicht die aktuelle Zeile in der SELECT-Anweisung (die die gleichen wie contract.projectid ist).

Ich bin mit Firebird. Ich brauche die Spalte in der Tabelle und nicht in einer SELECT-Anweisung wegen ORM Probleme in der Anwendung auf die Datenbank verwendet wird.

War es hilfreich?

Lösung

Präfix einfach das Feld mit Tabellenname der aktuellen Tabelle:

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

Andere Tipps

Können Sie einen Blick auf Ihre Abfrage erstellen und es in der ORM verwenden?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top