0

Книгавычисляемый столбец (Microsoft 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  |  ?  | 

Как я могу получить TOTAL_PRICE путем умножения Order.Quantity и Book.Unit_Price где Order.B_ID является FK для Book.B_ID. Спасибо!

+0

Проверьте изображение в этой ссылке. У вас будет четкое представление о Joins. Это поможет вам понять этот тип запросов. 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

Почему я получаю 0.0000 для всех Total_Price? Я следил за вашим кодом, но я только изменил первую строку на: CREATE FUNCTION dbo.GetTotalPrice (@id VARCHAR (5)) –

+0

Наверное, потому что @ret имеет значение null. Вы передаете правильный идентификатор? Попробуйте выполнить запрос самостоятельно. –

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

спасибо .....! –

Смежные вопросы