2011-11-13 63 views
0

我是翻譯中的新手!我正在嘗試使用用戶定義函數和CustomerID作爲輸入參數進行計算。 如果我正在執行計算單行,計算似乎工作。使用UDF無法準確計算

但是,由於單個客戶可以撥打多個支持電話,因此客戶可能會收取多行費用。

如果我嘗試使用CustomerID 1進行計算,則得到的金額不準確。我將這些代碼顛倒過來,無法理解如何實現這一目標。

以下是表格的管理單元的鏈接:我是新的,無法附加圖像。 See table Snapshot to illustrated values and rows

這裏是功能:

CREATE FUNCTION dbo.CalulateTotal (@CustomerId INT) 
RETURNS MONEY 
AS 
BEGIN 
DECLARE @GetTotalCost MONEY   
SELECT @GetTotalCost = ISNULL((SUM(SupportHours) * MAX(CostPerHour)),0) + ISNULL((SUM(MilesTraveled) * MAX(CostPer_Mile)),0) 
+ ISNULL((SUM(Supplies) + MAX(Misc)),0) 
FROM tblSupportCharges     
WHERE CustomerId = @CustomerId 
GROUP BY CustomerId 

RETURN @GetTotalCost 
END 

Select dbo.CalulateTotal(1) 

用於計算客戶ID 1的結果應該是13不15.

任何幫助將不勝感激。

回答

0

15似乎是正確的:

SELECT @GetTotalCost = ISNULL((SUM(SupportHours) * MAX(CostPerHour)),0) 
         + ISNULL((SUM(MilesTraveled) * MAX(CostPer_Mile)),0) 
         + ISNULL((SUM(Supplies) + MAX(Misc)),0) 


       ---  =  SUM(5, 2)   * MAX(2, 1) 
       ---  +  SUM(1, NULL)  * MAX(1, NULL) 
       ---  +  SUM(NULL,NULL) + MAX(NULL,NULL) 

       ---  =  7*2 + 1*1 + 0 

       ---  = 15 

也許,而不是SUM(SupportHours) * MAX(CostPerHour)你,你想:

SUM(SupportHours * CostPerHour) 

你可能也想用:

SUM(MilesTraveled * CostPer_Mile) 
+0

謝謝你很多爲您的輸入。你的建議讓我重新表達,並得到了這個工作!太感謝了! – Asynchronous