Как преобразовать исторические строки в столбцы в oracle? - PullRequest
0 голосов
/ 23 апреля 2020

Я использую Oracle 12 c DB. У меня есть следующая таблица:

  accountId      |     totalBalance |   balanceDate   |
      1          |         10       |   01/01/2010    |
      1          |         20       |   01/02/2010    |
      1          |         30       |   01/03/2010    |
      2          |         11       |   10/01/2010    |
      2          |         21       |   10/02/2010    |
      2          |         31       |   10/03/2010    |

В этой таблице будут храниться последние записи баланса за последние 3 месяца для каждой учетной записи, что означает, что каждая таблица будет иметь 3 записи в таблице. Число периодов известно, в данном случае - 3. Конечно, значения баланса будут меняться в зависимости от хода месяцев, поскольку в таблице всегда хранятся остатки за последние три месяца. Что неизвестно, конечно, это количество учетных записей.

Я хотел бы создать представление, которое показывает вышеуказанные данные, как показано ниже:

  accountId      |     firstMonth   |   secondMonth   | thirdMonth  |
      1          |         10       |       20        |     30      |
      2          |         11       |       21        |     31      |

Меня не волнует дата.

Я видел много похожих вопросов, но ни один из них не был таким же, и я не могу понять, как мне это реализовать. У кого-нибудь есть предложения, пожалуйста?

1 Ответ

0 голосов
/ 23 апреля 2020

Хм. , , Вы хотите относительный месяц. Предполагая, что даты месяца совпадают, вы можете использовать months_between():

select accountId,
       max(case when months_between(last_bd, balance_date) = 2 then totalBalance end) as firstMonth,
       max(case when months_between(last_bd, balance_date) = 1 then totalBalance end) as secondMonth,
       max(case when months_between(last_bd, balance_date) = 0 then totalBalance end) as thirdMonth
from (select max(balanceDate) over (partition by accountId) as last_bd, b.*
      from balances b
     ) b
group by accountId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...