我是翻译中丢失的新手!我正在尝试使用用户定义函数和CustomerID作为输入参数来执行计算。 如果我正在执行计算单行,则计算似乎有效。
但是,由于单个客户可以拨打多个支持电话,因此客户可以收取多行费用。
如果我尝试使用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)
计算CustomerId 1的结果应该是13而不是15。
非常感谢任何帮助。
答案 0 :(得分: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)