#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. Большое вам спасибо за ваш вклад. Ваши предложения заставили меня переработать выражение и заставить это работать! Миллион благодарностей!