0

计算列(微软的SQL Server 2014)

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

订购

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

我怎样才能乘以Order.QuantityBook.Unit_Price其中Order.B_ID是一个FK得到TOTAL_PRICEBook.B_ID。谢谢!

+0

检查此链接中的图像。你会清楚的想到加入。这将有助于你理解这种类型的查询。 http://stackoverflow.com/questions/35349303/php-compare-two-tables-and-store-result-in-third-table/35349429#35349429 – Mytroy2050

+0

@ Mytroy2050谢谢! –

回答

1

您可以创建一个函数,其中计算列将使用该功能。

CREATE FUNCTION dbo.GetTotalPrice(INT @id) 
RETURNS DECIMAL(19,4) 
AS 
BEGIN 
    DECLARE @ret DECIMAL(19,4) 
    SELECT @ret = O.Quantity * B.Unit_Price 
       FROM Order O 
        INNER JOIN Book B 
        ON O.B_ID = B.B_ID 
        WHERE B.B_ID = @id 
      IF (@ret IS NULL) 
      SET @ret = 0 
      RETURN @ret 
END 

ALTER TABLE dbo.Order 
    ADD Total_Price AS dbo.GetTotalPrice(O_ID) 
+0

非常感谢! –

+0

为什么我会为Total_Price获得0.0000?我跟着你的代码,但我只将第一行更改为:CREATE FUNCTION dbo.GetTotalPrice(@id VARCHAR(5)) –

+0

可能是因为@ret为空。你传递了正确的ID吗?尝试单独运行查询。 –

2

像你需要创建更多的声音一个VIEW

CREATE VIEW dbo.OrderPrice 
AS 

SELECT O.O_ID, 
     O.B_ID, 
     O.Quantity, 
     O.Quantity * B.Unit_Price Total_Price 
FROM Order O 
INNER JOIN Book B 
    ON O.B_ID = B.B_ID; 
+0

谢谢..... –