我有一个如下数据集:
+-----------------+---------------------+ | job_code | job_title | +-----------------+---------------------+ | finance_acct | Business Accountant | | finance_manager | Business Manager | | it_programmer | IT Programmer | | it_manager | IT Manager | +-----------------+---------------------+
等
我想获取所有共享相同职务代码前半部分的职务并将其打印为列表。如下所示:
财务:业务会计师,业务经理
it:IT程序员,IT经理
我该怎么做?我知道如何使用SUBSTR
提取作业代码的第一部分。基本上我可以创建左栏。不过,我遇到了两个问题:
GROUP BY
命令,我不断收到ORA-00979错误(“
GROUP BY表达式”)。CONCAT
,但即使如此,在
给定行的最后一个条目。我在网上看到了一些关于
STUFF
命令,但我知道没有此命令也是可以的。有什么提示吗?谢谢。
答案 0 :(得分:2)
regexp_substr()
,可以从job_code
中提取想要的部分。剩下的只是聚合和listagg()
:
select regexp_substr(job_code, '[^_]+', 1, 1) as half_job_code,
listagg(job_title, ', ') within group (order by job_title) as job_titles
from t
group by regexp_substr(job_code, '[^_]+', 1, 1)
答案 1 :(得分:1)
尝试使用listagg功能。您可以指定一个定界符并根据所需数据对其进行分组。