SQL — ссылка на текущую строку в вычисляемом столбце с помощью SELECT
Вопрос
У меня есть таблица, в которой представлены параметры контракта, включая их изменение с течением времени посредством дополнений.Первое дополнение представляет собой «специальное» дополнение, отражающее параметры при первом подписании контракта.
Вот как должна выглядеть таблица:
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 — это FK для таблицы Projects, первичный ключ которой также называется ProjectID.
Я хочу, чтобы DeadlineDate было вычисляемым полем, рассчитанным следующим образом:
DeadlineDate COMPUTE BY ((
select first 1 AddMonth(contract.BeginDate, DeadlineMonths)
from addendums contract
where contract.projectid = projectid
order by contract.BeginDate ))
Проблема в том, что в contract.projectid = projectid
второй ProjectID должен ссылаться на текущую вычисляемую строку, а не на текущую строку в операторе выбора (что аналогично contract.projectid
).
Я использую Firebird.Мне нужен столбец в таблице, а НЕ в инструкции SELECT из-за проблем ORM в приложении, использующем базу данных.
Решение
Просто добавьте к полю имя текущей таблицы:
DeadlineDate COMPUTED BY ((
select first 1 AddMonth(contract.BeginDate, DeadlineMonths)
from addendums contract
where contract.projectid = projects.projectid
order by contract.BeginDate ))
Другие советы
Можете ли вы создать представление по вашему запросу и использовать его в 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