SQL - Bezug aktuelle Zeile in einer berechneten Spalte mit SELECT
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.
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