Создайте плоский файл, который «сводит» несколько строк транзакций в одну строку в SQL * PLus.

Как следует из названия, мне нужен метод выравнивания нескольких строк в один вывод luine для каждой учетной записи. Например, таблица выглядит так:

Транзакция по счету

12345678 азбука

12345678 ДЕФ

12346578 ГХИ

67891011 азбука

67891011 ДКЛ

Мне нужно, чтобы вывод был:

12345678|АВС|DEF|GHI

67891011|АВС|ДКЛ

Сумма транзакций неизвестна. Для некоторых аккаунтов это может быть 1 или 2, вплоть до сотен.


person Community    schedule 27.03.2009    source источник


Ответы (1)


Вы можете сделать это, используя настроенную версию Функция STRAGG Тома Кайта, например:

select account||'|'||stragg(transaction)
from mytable
where ...
group by account;

Функция, как указано, использует запятые для разделения значений, но вы можете легко изменить ее, чтобы использовать «|».

Пример использования EMP (и еще с запятыми):

SQL> select deptno || '|' || stragg(ename) names
  2  from emp
  3  group by deptno;

NAMES
--------------------------------------------------------------------------------
10|CLARK,KING,FARMER,MILLER
20|JONES,FORD,SCOTT
30|ALLEN,TURNER,WARD,MARTIN,BLAKE
person Tony Andrews    schedule 27.03.2009
comment
красивый ! Я понятия не имел, что что-то подобное существует! мы написали много кода, чтобы добиться этого! - person Preets; 08.04.2009
comment
Да, очень удобная функция. - person Tony Andrews; 08.04.2009