powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как написать пользовательскую агрегатную функцию?
4 сообщений из 4, страница 1 из 1
Как написать пользовательскую агрегатную функцию?
    #40084539
diagirl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Подскажите, пожалуйста, есть таблица с полями client, summa, condition (условие: выдача или погашение кредита). Поле client не уникально, то есть для каждого клиента несколько операций. Необходимо для каждого клиента посчитать, какая сумма осталась к погашению, то есть если в condition выдача, то значение из поля summa должно прибавляться, если погашение, то вычитаться.
Написала функцию, которая делает это

CREATE OR REPLACE FUNCTION rest_debt (
summa NUMBER,
condition VARCHAR2,
stat1 VARCHAR2 DEFAULT 'Выдача кредита',
stat2 VARCHAR2 DEFAULT 'Погашение кредита')
RETURN NUMBER IS
rest NUMBER := 0;
BEGIN
IF condition = stat1 THEN rest := rest+summa;
ELSIF condition = stat2 THEN rest := rest+summa;
ELSE rest := rest;
END IF;
RETURN rest;
END rest_debt;

но при использовании ее в SELECT, она работает для каждой строки отдельно, при использовании GROUP BY возникает ошибка Выражение не является выражением GROUP BY. Как сделать, чтобы она считала именно по группе? Или может есть другие варианты решения такой задачи?
...
Рейтинг: 0 / 0
Как написать пользовательскую агрегатную функцию?
    #40084542
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
diagirl,

А зачем тут функция?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT  CLIENT,
        SUM(
            CASE CONDITION
              WHEN 'Выдача кредита' THEN SUMMA
              WHEN 'Погашение кредита' THEN -SUMMA
            END
           )
  FROM  YOUR_TABLE
  GROUP BY CLIENT
/



SY.
...
Рейтинг: 0 / 0
Как написать пользовательскую агрегатную функцию?
    #40084572
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
diagirl
Код: plsql
1.
2.
IF condition = stat1 THEN rest := rest+summa;
ELSIF condition = stat2 THEN rest := rest+summa;

Какой хороший у вас банк! Не буду брать у вас кредит. Так, на всякий случай

Пользовательскую агрегатную функцию писать немного сложнее, чем вы думаете. Примерно так: Using User-Defined Aggregate Functions Но в целом, не очень сложно.
Хотя для ваших целей она не нужна, см. пример выше.
...
Рейтинг: 0 / 0
Как написать пользовательскую агрегатную функцию?
    #40084594
diagirl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,
Все было так просто, спасибо)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как написать пользовательскую агрегатную функцию?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]