簡體   English   中英

使用不同的表 SQL 添加計算列

[英]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表。


另一方面,將任何東西與硬編碼值( 3001000 )相乘可能不是一個好主意,因為 - 如果它們改變了怎么辦? 您會修改您編寫的所有代碼以實現這些更改嗎? 從你到目前為止所說的,那些應該是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM