Как преобразовать вертикальную строку в горизонтальную в Oracle - PullRequest
0 голосов
/ 11 апреля 2019

O N K A R

как конвертировать в ONKAR.Я знаю об обратном.Но это я не могу решить.

Ответы [ 4 ]

3 голосов
/ 11 апреля 2019

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

SELECT LISTAGG(letter, '') WITHIN GROUP (ORDER BY position) word
FROM yourTable;

Демо

Данные:

letter | position
O      | 1
N      | 2
K      | 3
A      | 4
R      | 5
0 голосов
/ 11 апреля 2019

Если ваши данные находятся в одной строке, разделенной символами новой строки (ASCII 13), тогда вы можете просто использовать REPLACE( value, CHR(13) ):

Oracle Setup :

CREATE TABLE test_data ( value ) AS
SELECT 'O' || CHR(13) || 'N' || CHR(13) || 'K' || CHR(13) || 'A' || CHR(13) || 'R' FROM DUAL

Запрос :

SELECT value, REPLACE( value, CHR(13) ) FROM test_data

Вывод :

VALUE     | REPLACE(VALUE,CHR(13))
:-------- | :---------------------
O         | ONKAR                 
N         |
K         |
A         |
R         |

дБ <> скрипка здесь

0 голосов
/ 11 апреля 2019

Вы можете использовать это, пока в результате данных есть все строки, которые вы хотите соединить.

with data as (select 'O' as  letter from dual
              union all
              select 'N' from dual
              union all
              select 'K' from dual
              union all
              select 'A' from dual
              union all
              select 'R' from dual)
SELECT LISTAGG(letter, '') WITHIN GROUP (ORDER BY rownum)
FROM data;
0 голосов
/ 11 апреля 2019

Listagg - правильное решение для строк длиной до 4000 байт, потому что он возвращает тип данных varchar2. Но для более длинных строк вы можете получить тип данных clob.

with s (letter, position) as (
select 'O', 1 from dual union all
select 'N', 2 from dual union all
select 'K', 3 from dual union all
select 'A', 4 from dual union all
select 'R', 5 from dual)
select xmlcast(xmlagg(xmlelement(x, letter) order by position) as clob) c
from s;

C              
---------------
ONKAR
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...