SQL显示来自相同列的多个值

时间:2015-07-14 07:38:35

标签: sql oracle

有2个表,我必须做一个内连接。

第一个名为People

的表格
Name, Surname, id, and value  

第二个名为Work

的表格
id (external key of fist table), category, state, roles, date. 

列“角色”可以有多个值(员工导演工作人员等)。

我必须在内部联接中显示一行中每个人的角色历史(名称姓氏角色1,角色2角色3)

Jack Brown员工主管工作人员的例子

如何在一行中显示一个列中包含的多个值?

2 个答案:

答案 0 :(得分:1)

如果您只是需要查看角色,但并不真正要求他们位于不同的列中,您可以使用listagg()

select p.id, 
       p.name, 
       p.surname, 
       listagg(w.roles, ',') within group (order by start_date) as all_rows
from people p
  join work w on p.id = w.id
group by p.id, p.name, p.surname

这将输出如下内容:

ID | NAME   | SURNAME | ALL_ROLES                
---+--------+---------+-------------------------
 1 | Jack   | Brown   | employee,worker,director

您实际上不能将每个角色放在一个单独的列中,因为在SQL中,结果中的列数是固定的。所以你不能得到一个结果,其中有三列用于" Jack Brown"和#34; Arthur Dent"。

的角色有两列

答案 1 :(得分:0)

您可以编写PL-SQL函数,它将从表Work中选择所有相关记录,并通过表中的给定ID来迭代它以构建包含所有角色的字符串,或者您可以使用{{3如果您使用的是10g版本的Oracle或更高版本

,请执行此操作