Мне нужно отобразить сумму денег, использованную каждым методом оплаты по месяцам.
ПРИМЕР:
JANUARY RENTALS
CASH $300
VISA $200
TOTAL: $500
Я пробовал много разных операторов GROUP BY и пробовал DISTINCT, но продолжаю получать ошибку "NOT A GROUP BY EXPRESSION". Код (без выражения GROUP BY) отображает длинный список, который повторяется в те же месяцы. Я не знаю наверняка, является ли проблема даже в GROUP BY или в том, как у меня настроен L OOP.
ПРИМЕЧАНИЕ. Все данные относятся к одному году, но дата в формате 16-DE C -04 Это код:
SET SERVEROUTPUT ON;
CREATE OR REPLACE FUNCTION NameMonth (MonthNum INT)
RETURN VARCHAR2 AS
Month_Name VARCHAR2(9) := 'Default';
BEGIN
CASE
WHEN MonthNum = 1 THEN Month_Name := 'January';
WHEN MonthNum = 2 THEN Month_Name := 'February';
WHEN MonthNum = 3 THEN Month_Name := 'March';
WHEN MonthNum = 4 THEN Month_Name := 'April';
WHEN MonthNum = 5 THEN Month_Name := 'May';
WHEN MonthNum = 6 THEN Month_Name := 'June';
WHEN MonthNum = 7 THEN Month_Name := 'July';
WHEN MonthNum = 8 THEN Month_Name := 'August';
WHEN MonthNum = 9 THEN Month_Name := 'September';
WHEN MonthNum = 10 THEN Month_Name := 'October';
WHEN MonthNum = 11 THEN Month_Name := 'November';
WHEN MonthNum = 12 THEN Month_Name := 'December';
END CASE;
RETURN Month_Name;
END;
/
DECLARE
CURSOR cNameOfMonth IS
SELECT NameMonth(EXTRACT(MONTH FROM RENTAL.RENTDATE)) AS RentMonth, RENTAL.PAYMENTMETHOD, RENTITEM.RENTFEE
FROM ALLPOWDER.RENTAL, ALLPOWDER.RENTITEM
WHERE RENTAL.RENTID = RENTITEM.RENTID
GROUP BY EXTRACT(MONTH FROM RENTAL.RENTDATE)
-- I've also tried NameMonth(EXTRACT(MONTH FROM RENTAL.RENTDATE)) and just RENTAL.RENTDATE
ORDER BY RentMonth;
Rental_Rec cNameOfMonth%ROWTYPE;
BEGIN
OPEN cNameOfMonth;
LOOP
FETCH cNameOfMonth INTO Rental_Rec;
EXIT WHEN cNameOfMonth%NOTFOUND;
DBMS_OUTPUT.NEW_LINE;
DBMS_OUTPUT.PUT_LINE(Rental_Rec.RentMonth || ' Rentals ----------------');
END LOOP;
CLOSE cNameOfMonth;
END;
/