0

(B_ID是PK)乘2點從不同的表中的值,並將結果存儲在一個新表

| B_ID | Name | Unit_Price| 
|------+---------+-----------| 
| B01 | Math |  25 | 
| B02 | Science |  34 | 

訂單(O_ID是PK)

| O_ID | Date | Total_Price | 
|------+---------+-------------| 
| O01 | 12/1/16 | NULL  | 
| O02 | 20/3/16 | NULL  | 

訂單Detais(O_ID,B_ID是複合PK,其中兩個ID都是FK到上述表格)

| O_ID | B_ID | Quantity | 
|------+------+-----------| 
| O01 | B01 |  2  | 
| O01 | B02 |  1  | 
| O02 | B02 |  5  | 

如何通過用計算的結果替換NULL插入計算成Total_PriceUnit_Price * Quantity)。我試過使用CTE解決它,但我不喜歡我需要在添加新記錄(Exp:O03)時再次運行CTE以更新它。

+1

如果您*存儲*一個計算值,您*引入*存儲的,計算的值的機會與原始基礎數據不一致。理想情況下,不要存儲這些值,除非或直到證明按需計算它的性能(如有必要,將邏輯放在視圖中)是不充分的。 *然後*考慮存儲值,但如果可能的話,使用內置的機制來確保數據庫系統自動維護該值,而不必記住重新計算它。 –

回答

0

繼@Damien的評論,如果您決定不存儲計算值,那麼你可以嘗試使用下面的查詢來計算總價格爲每個訂單:

SELECT o.O_ID, 
     SUM(od.Quantity * b.Unit_Price) AS Total_Price 
FROM Order o 
LEFT JOIN Order_Details od 
    ON o.O_ID = od.O_ID 
LEFT JOIN Book b 
    ON od.B_ID = b.B_ID 
GROUP BY o.O_ID 
0

我想你colud具有從這個想法:

create table book (b_id char(10),name char(20),Unit_Price int) 
create table orders(o_id char(10),Date varchar(10),Total_Price int) 
Create table Order_details(o_id char(10),b_id char(10),quantity int) 

insert into book values ('B01','Math' ,25); 
insert into book values ('B02','Science',34); 

INSERT INTO orders values ('O01','12/1/16',NULL)          
INSERT INTO orders values ('O02','20/3/16',NULL) 

Insert into order_details values('O01','B01',2); 
Insert into order_details values('O01','B02',1); 
Insert into order_details values('O02','B02',5); 




declare @total int, @o_id char(10) 

declare c cursor for 
select sum(a.unit_price * b.quantity),b.o_id from book a join order_details b on a.b_id=b.b_id group by b.o_id 
open c 
fetch next from c into @total,@o_id 
while @@FETCH_STATUS=0 
begin 
update orders set [email protected] where [email protected]_id 
fetch next from c into @total,@o_id 
end 
close c 
deallocate c 

select * from orders 
+0

我試着在order_details(插入到Order_details值('O02','B01',1))中添加一條新記錄,但是當我運行時(從訂單中選擇*),計算結果沒有更新。 – Hidden

相關問題