列出类别中的项目(SQL)

时间:2018-12-01 04:09:55

标签: sql oracle

我有一个如下数据集:

+-----------------+---------------------+
| job_code        | job_title           |
+-----------------+---------------------+
| finance_acct    | Business Accountant |
| finance_manager | Business Manager    |
| it_programmer   | IT Programmer       |
| it_manager      | IT Manager          |
+-----------------+---------------------+

我想获取所有共享相同职务代码前半部分的职务并将其打印为列表。如下所示:

财务:业务会计师,业务经理

it:IT程序员,IT经理

我该怎么做?我知道如何使用SUBSTR提取作业代码的第一部分。基本上我可以创建左栏。不过,我遇到了两个问题:

  1. 使用GROUP BY命令,我不断收到ORA-00979错误(“ GROUP BY表达式”)。
  2. 我不知道如何用逗号分隔列表。一世 使用了CONCAT,但即使如此,在 给定行的最后一个条目。我在网上看到了一些关于 STUFF命令,但我知道没有此命令也是可以的。

有什么提示吗?谢谢。

2 个答案:

答案 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功能。您可以指定一个定界符并根据所需数据对其进行分组。