[英]Adding a calculated column using different table SQL
我是 SQL 的新手,所以請放心。
我正在嘗試將一個名為“InvoiceAmount”的計算列添加到我的“CompanyInvoice”表中。
我的 CompanyInvoice 表當前具有以下列:
CREATE TABLE CompanyInvoice(
InvoiceID CHAR(5) NOT NULL,
CompanyAccountID CHAR(5) NOT NULL CONSTRAINT FK_CompanyInvoice_CompanyAccount
FOREIGN KEY REFERENCES CompanyAccount(CompanyAccountID) ON UPDATE CASCADE,
CompanyID CHAR(5) NOT NULL CONSTRAINT FK_CompanyInvoice_ProductionCompany
FOREIGN KEY REFERENCES ProductionCompany(CompanyID),
BookingID CHAR(5) NOT NULL CONSTRAINT FK_CompanyInvoice_EventBooking
FOREIGN KEY REFERENCES EventBooking (BookingID),
TheatreID CHAR(5) NOT NULL CONSTRAINT FK_CompanyInvoice_Theatre
FOREIGN KEY REFERENCES Theatre(TheatreID)ON UPDATE CASCADE);
我想添加一個計算發票金額的新列 - 發票金額的計算取決於事件的持續時間(EventDuration 列保存在不同的“事件”表中)和“TheatreID”,例如如果 TheatreID=1 則 EventDuration x 300,如果 TheatreID=2 則 EventDuration x 1000。
非常感謝
正如您所描述的,一個視圖看起來像
create view v_invoice as
select c.InvoiceID,
e.EventDuration * case when c.TheatreID = 1 then 300
when c.TheatreID = 2 then 1000
end as invoice_amount
from CompanyInvoice c join ... ??? unknown; how to get to Event table?
如你所見, ???
意味着您沒有描述如何從我們知道的數據中獲取Event
表。
另一方面,將任何東西與硬編碼值( 300
、 1000
)相乘可能不是一個好主意,因為 - 如果它們改變了怎么辦? 您會修改您編寫的所有代碼以實現這些更改嗎? 從你到目前為止所說的,那些應該是Theatre
表中的另一列(或者一個新表,如果你想跟蹤隨時間的變化;那個新表將與Theatre
處於父子關系)。
像這樣的東西(請注意,我仍在猜測加入條件):
create view v_invoice as
select c.InvoiceID,
e.EventDuration * t.value as invoice_amount
-------
this, instead of hardcoded 300 or 1000 or ...
from CompanyInvoice c join Theatre t on t.TheatreID = c.TheatreID
join Event e on e.EventID = t.EventID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.