Создайте представление, используя готовую функцию для суммы GST и общей цены (цена + GST) - PullRequest
0 голосов
/ 27 апреля 2018

Я борюсь с вызовом функции, чтобы создать список деталей продаж, включая столбец для суммы GST и общей цены продажи (исходная цена плюс GST) для каждой отдельной продажи.

Вот функция, которую я создал:

CREATE PROCEDURE dbo.sp_ReturnTaxedPrice

    @ProductID int,
    @GST float,
    @GSTPrice float output

AS
BEGIN

    DECLARE @Price float
    SET @Price = (SELECT Price FROM Products WHERE ProductID = @ProductID)
    SET @GSTPrice = @Price * (1 - @GST)
END

И вот представление, в котором я хотел бы использовать эту функцию, чтобы добавить два столбца в конце таблицы для отображения суммы GST и общей суммы цены (исходная цена плюс GST) для каждой продажи:

CREATE VIEW vw_SaleDetails
AS
SELECT 
    Sales.SaleNo, 
    Sales.SaleDate, 
    Customer.FirstName, 
    Customer.LastName,
    Category.Category, 
    Products.ProductDescription, 
    Type.Type, 
    Products.Year, 
    Products.Price

FROM Category JOIN Customer ON Category.CategoryID = Customer.CategoryID
    JOIN Sales ON Customer.CustomerID = Sales.CustomerID
    JOIN SalesProducts ON Sales.SaleNo = SalesProducts.SaleNo
    JOIN Products ON Products.ProductID = SalesProducts.ProductID
    JOIN ProductType ON Products.ProductID = ProductType.ProductID
    JOIN Type ON Type.TypeID = ProductType.TypeID

1 Ответ

0 голосов
/ 27 апреля 2018

Вы хотите функцию, а не процедуру:

CREATE FUNCTION dbo.sp_ReturnTaxedPrice (
    @ProductID int,
    @GST float
) RETURNS float
AS
BEGIN
    DECLARE @Price float;

    SET @Price = (SELECT Price FROM Products WHERE ProductID = @ProductID);

    SET @GSTPrice = @Price * (1 - @GST);

    RETURN(@GSTPrice);
END;

Затем вы можете сделать:

select . . .
       dbo.sp_ReturnTaxedPrice(@ProductID, @GST)
. . .

Теперь некоторые комментарии:

  • Помещение этой логики в пользовательскую функцию (или хранимую процедуру) добавляет много накладных расходов. Вы должны просто вставить арифметику в код.
  • float неверный тип данных для денежных значений. Используйте MONEY или DECIMAL / NUMERIC.
  • Если вы не понимаете, почему, изучите типы с фиксированной и плавающей точкой.
...