如何使用SQL在单列中获取逗号分隔的值

时间:2019-03-07 15:56:42

标签: sql oracle string-aggregation

我有下表和预期结果。请让我知道是否有可能取得结果。请参考所附图片。

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以使用listagg()

select e.id, e.name, e.sal,
       listagg(d.dept, ',') within group (order by d.dept_id) as depts,
       listagg(d.dept_id, ',') within group (order by d.dept_id) as dept_ids,
from employee e left join
     department d
     on e.name = d.name
group by e.id, e.name, e.sal;

有关数据模型的一些评论。

  • 您的department表中应有一个dept_id作为主键(没有重复项)。
  • 您称为department的表应真正称为employee_departments,因为它是结合两个不同实体的联结表。
  • 该表应使用emp_id作为employee的链接,而不是name。也就是说,外键关系应该是employee的主键。