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)