【问题标题】:How to convert the (clob data) rows into columns如何将(clob 数据)行转换为列
【发布时间】:2020-07-12 02:50:06
【问题描述】:

我需要将clob数据pivot到多个列中,基本上,我想将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;

输出是

这里的数字是 (56, 39, 70, 90, 52)- 连接的员工姓名的总数。

我想查看每个月的所有员工姓名,在每个经理别名下工作 注意:这里我展示的是单身经理 '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);

我的 select 语句的输出是这样的

但我的预期输出应该是这样的

如果这是关于数字的,我可以分别使用 Max/Count。在这里,我正在寻找非数字数据。 我也尝试过数据透视,但因为我在 staff_name 列中有 clob 数据,所以我也无法使用数据透视和解码。因为两者都有 4000 个字符的限制。我愿意接受任何建议。

【问题讨论】:

  • 按姓名、月份从员工组中选择姓名、月份、wm_concat(staff_name);您是否将其作为 clob 列在 staff_names 上运行并得到有问题的上述结果?我想知道它不在这里运行,看来 lob 数据类型有很多限制,不应该以这种方式使用。

标签: oracle pivot-table multiple-columns rows clob


【解决方案1】:

反正我不知道 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] )
)

我建议你研究pivot in oracle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 2017-05-22
    相关资源
    最近更新 更多