2017-01-15 13 views
1

私は請求書のトップコストを計算しようとしていますが、これを行うには4つのテーブルのデータを結合して合計する必要があります。私は、管理するには大きすぎるかもしれないので、下のビューではなく、UDFのソリューションを好むでしょう。SQL Serverビュー4つのテーブルからのデータの結合/計算

データベースには、次のようになります。

(Product.Rentcost) (Accessory.Rentcost) 

テーブルRentedProductRentedAccessory私はどの請求書のコストを決定する必要がある請求書番号が含まれています。

テーブルProductAccessoryは私が合計する必要があり、コストが含まれています最も。

(RentedProduct.Rentcost)  (RentedAccessory.Rentcost) 

これまでのところ私はこのビューを使用してProductRentedProductに結合を使用して製品から私が望む結果を得ることができました:

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 
+0

サンプルデータがありますか?私はクエリを書き込もうとすることができるように作成テーブルのためにSQLを共有してください。また、希望の結果を教えてください –

答えて

1

あなたのようにテーブル値関数を作成することができます次

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) 
+0

作品は魅力的です。 – Begotten

関連する問題