SQL 服务器查看来自 4 个表的 combining/calculating 数据

SQL Server View combining/calculating data from 4 tables

我正在尝试计算发票的最高成本,但为了执行此操作,我需要合并 4 个表中的数据并求和。我更喜欢使用 UDF 的解决方案,而不是扩展下面的视图,因为它可能变得太大而无法管理。

数据库如下所示:

ProductAccessory 包含我需要求和的费用:

(Product.Rentcost)    (Accessory.Rentcost)

RentedProductRentedAccessory 包含我需要确定哪个发票成本最高的发票编号。

(RentedProduct.Rentcost)     (RentedAccessory.Rentcost)

到目前为止,我只能使用此视图在 ProductRentedProduct 上使用联接从 Product 获得我想要的结果:

CREATE VIEW Profit 
AS
    SELECT TOP 1 
        RentedProduct.InvoiceNr, 
        SUM(Product.Rentcost) AS Cost 
    FROM 
        RentedProduct
    JOIN 
        Product ON Product.ProductNr = RentedProduct.ProductNr
    GROUP BY 
        RentedProduct.InvoiceNr
    ORDER BY   
        Cost DESC

您可以创建一个 table-valued 函数,如下所示:

CREATE FUNCTION dbo.tvfn_TopInvoices(
    @Top INT
)
RETURNS TABLE
AS
RETURN

SELECT   TOP (@Top)
         InvoiceNr
        ,Cost
FROM (

    SELECT
             RentedProduct.InvoiceNr
            ,SUM(Product.Rentcost) AS Cost
    FROM RentedProduct
        JOIN Product
            ON Product.ProductNr=RentedProduct.ProductNr
    GROUP BY RentedProduct.InvoiceNr

    UNION ALL

    SELECT
             RentedAccessory.InvoiceNr
            ,SUM(Accessory.Rentcost) AS Cost
    FROM RentedAccessory
        JOIN Accessory
            ON Accessory.AccessoryNr=RentedAccessory.AccessoryNr
    GROUP BY RentedAccessory.InvoiceNr

) p
ORDER BY Cost DESC

GO

然后您可以像这样使用此函数:

SELECT   InvoiceNr
        ,Cost
FROM dbo.tvfn_TopInvoices(1)