SQL Server View combinant / calculant des données à partir de 4 tables

J'essaie de calculer le coût le plus élevé d'une facture, mais pour ce faire, je dois combiner datatables de 4 tables et les additionner. Je préférerais une solution avec les fonctions UDF au lieu de développer la vue ci-dessous car elle pourrait devenir trop grande à gérer.

La database ressemble à ceci:

Les tables Product et Accessory contiennent le coût dont j'ai besoin pour additionner:

 (Product.Rentcost) (Accessory.Rentcost) 

Les tables RentedProduct et RentedAccessory contiennent le numéro de facture dont j'ai besoin pour déterminer quelle facture coûte le plus cher.

 (RentedProduct.Rentcost) (RentedAccessory.Rentcost) 

Jusqu'à présent, j'ai seulement pu get les résultats que je voulais du produit en utilisant une jointure sur Product et RentedProduct utilisant cette vue:

 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 

Vous pouvez créer une fonction table comme suit:

 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 

Vous pouvez ensuite utiliser cette fonction comme ceci:

 SELECT InvoiceNr ,Cost FROM dbo.tvfn_TopInvoices(1)