SQL - المرجع الحالي الصف الحالي في عمود محسوب مع تحديد
سؤال
لدي جدول يمثل معلمات العقد - بما في ذلك تغييرها بمرور الوقت من خلال الإدمان. الإضافة الأولى هي إضافة "خاص" تمثل المعلمات عند توقيع العقد لأول مرة.
إليك كيف يجب أن يبدو الجدول:
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 إلى جدول المشاريع الذي يسمى مفتاحه الأساسي أيضا ProjectId.
أريد أن أكون حقل محسوب، محسوب مثل ذلك:
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 ثان الإشارة إلى الصف الحالي الذي يتم حسابه، وليس الصف الحالي في عبارة SELECT (وهو نفسه contract.projectid
).
أنا أستخدم firebird. أحتاج إلى العمود في الجدول وليس في عبارة مختارة بسبب مشكلات 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
لا تنتمي إلى StackOverflow