Проблема с получением точного вычисления с помощью UDF

#sql-server

#sql-server

Вопрос:

Я новичок, заблудившийся в переводе! Я пытаюсь выполнить вычисление, используя определяемую пользователем функцию и CustomerID в качестве входного параметра. Кажется, что вычисление работает, если я выполняю вычисление одной строки.

Однако, поскольку один клиент может совершать много обращений в службу поддержки, у клиента может быть несколько строк начислений.

Если я попытаюсь вычислить, используя CustomerID 1, полученная сумма будет неточной. Я перевернул этот код с ног на голову и не могу понять, как это сделать.

Вот ссылка на snap shop таблицы: я новичок и не могу прикреплять изображения. Смотрите Снимок таблицы с иллюстрированными значениями и строками

И вот функция:

 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.

Любая помощь будет высоко оценена.

Ответ №1:

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)
  

Комментарии:

1. Большое вам спасибо за ваш вклад. Ваши предложения заставили меня переработать выражение и заставить это работать! Миллион благодарностей!