Как преобразовать строки (данных clob) в столбцы - PullRequest
0 голосов
/ 12 июля 2020

Мне нужно развернуть данные clob в несколько столбцов, в основном, я хочу преобразовать строки данных clob в столбцы.

create table staff (
name varchar2(200),
month varchar2(20),
staff_names clob);

insert into staff values ('Vijay','Jan','staff_name_1');
insert into staff values ('Vijay','Jan','staff_name_2');
insert into staff values ('Vijay','Jan','staff_name_3');
insert into staff values ('Vijay','Jan','staff_name_4');
insert into staff values ('Vijay','Jan','staff_name_5');
insert into staff values ('Vijay','Jan','staff_name_6');
insert into staff values ('Vijay','Jan','staff_name_7');
insert into staff values ('Vijay','Jan','staff_name_8');
insert into staff values ('Vijay','Jan','staff_name_9');
insert into staff values ('Vijay','Jan','staff_name_10');
insert into staff values ('Vijay','Jan','staff_name_11');
insert into staff values ('Vijay','Jan','staff_name_12');
insert into staff values ('Vijay','Jan','staff_name_13');
...
insert into staff values ('Vijay','May','staff_name_13');

select name, month, wm_concat(staff_name) from staff group by name, month;

и вывод

enter image description here

Here numbers is (56, 39, 70, 90, 52)- total number of staff names concatenated.

I want to see all the staff names for each month, working under each manager alias name Note: Here i am showing single manager 'Vijay'

select
    name,
    case when month='Jan' then all_names
    end as Jan,
    case when month='Feb' then all_names
    end as Feb,
    case when month='Mar' then all_names
    end as Mar,
    case when month='Apr' then all_names
    end as Apr,
    case when month='May' then all_names
    end as May
from
(select name, month, wm_concat(staff_name) as all_names from staff group by name, month);

Output of my select statement is coming like this

enter image description here

but my expected output should be like this

введите описание изображения здесь

Если речь идет о числах, я могу использовать Max / Count соответственно. Здесь я ищу нечисловые c данные. Я также пробовал pivot, но поскольку у меня есть данные clob в столбце staff_name, я также не могу использовать pivot и decode. Потому что оба имеют ограничение в 4000 символов. Я открыт для любых предложений.

1 Ответ

1 голос
/ 12 июля 2020

Я все равно не знаю, что такое wm_concat

Вам не нужно использовать case when, вы должны использовать pivot, как показано ниже:

select 
* 
from 
(
select 
t.name,
t.month,
t.staff_names
from staff t
)
pivot (
count(staff_names)--<aggregation function>
For month in ([Jan],[Feb],[Mar],[Apr] )
)

I Предлагаем вам изучить pivot in oracle

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