SQL 显示来自同一列的多个值
Posted
技术标签:
【中文标题】SQL 显示来自同一列的多个值【英文标题】:SQL show multiple values from same columns 【发布时间】:2015-07-14 07:38:35 【问题描述】:有 2 个表,我必须进行内部连接。
第一个表名为People
Name, Surname, id, and value
第二个表叫Work
id (external key of fist table), category, state, roles, date.
“角色”列可以有多个值(员工主管工人等)。
我必须在一行中显示每个人的角色历史(姓名角色1,角色2角色3)
Jack Brown 员工董事员工示例
如何在一行中显示一个列中包含的多个值?
【问题讨论】:
【参考方案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”角色的三列和“Arthur Dent”角色的两列的结果。
【讨论】:
【参考方案2】:您可以编写 PL-SQL 函数,该函数将通过 People 表中的给定 id 从表 Work 中选择所有相关记录,并在游标中对其进行迭代以构建具有所有角色的字符串,或者您可以使用 DBMS_XMLGEN.GETXML 生成 XML如果您使用的是 10g 版本的 Oracle 或更高版本,则可以使用此功能
【讨论】:
不能使用简单的内部连接? 您可以在此处查看 SQL 连接的工作原理codeproject.com/Articles/33052/…以上是关于SQL 显示来自同一列的多个值的主要内容,如果未能解决你的问题,请参考以下文章
SQLAlchemy filter_by 来自同一列的多个项目