Я довольно новичок в SQL и пытаюсь создать хранимую процедуру, которая позволяет пользователю вводить месяц (int) и год (int) в качестве параметров, где он затем отображает CustomerNumber, CustomerName и TotalAmountSpent за указанный месяц и год. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я выполняю свою процедуру, она не показывает фактическую сумму для каждого клиента. Он показывает несколько CustomerNumbers и CustomerNames, которые являются одним и тем же лицом, и в нем перечислены все отдельные суммы, которые они потратили за этот период времени. Он должен просто показывать ОДИН результат на клиента и иметь фактическую сумму. Я предоставлю свой код, чтобы вы могли на него посмотреть, любая помощь будет принята с благодарностью! Я почти уверен, что это просто оператор SELECT, который не верен, потому что мои строки ошибок и все остальное в SPRO C, кажется, работает так, как должно.
CREATE PROCEDURE CustomerBooks
@SaleMonth int,
@SaleYear int
AS
IF @SaleMonth IS NULL OR @SaleYear IS NULL
BEGIN
RAISERROR('You must enter the desired month and year to display the customer sale information', 16, 1)
END
ELSE
BEGIN
IF @SaleMonth < 1 OR @SaleMonth > 12
BEGIN
RAISERROR ('That Sale Month is not valid', 16, 1)
END
ELSE
BEGIN
IF @SaleMonth > MONTH(GETDATE())
BEGIN
RAISERROR ('That Sale Month is in the future', 16, 1)
END
ELSE
BEGIN
IF @SaleYear > YEAR(GETDATE())
BEGIN
RAISERROR ('That Sale Year is in the future', 16, 1)
END
ELSE
BEGIN
SELECT C.CustomerNumber AS 'Customer Number', LastName + ', ' + FirstName AS 'CustomerName', SUM(Subtotal) AS 'Total Amount Spent'
FROM Customers C
INNER JOIN Sales S ON S.CustomerNumber = C.CustomerNumber
GROUP BY Date, C.CustomerNumber, LastName, FirstName
HAVING Month(Date) = @SaleMonth AND YEAR(Date) = @SaleYear
END
END
END
END
RETURN
GO
Это также изображение результатов, которые я получаю в своей таблице при выполнении процедуры: https://drive.google.com/file/d/1g5V3ojT1K-U5LCdK-KftxHgRfdi8NhNU/view?usp=sharing