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 显示来自同一列的多个值的主要内容,如果未能解决你的问题,请参考以下文章

mysql 来自同一列的多个连接具有不同的键

来自同一 ID 的 SQL 列的 SUM 值

SQLAlchemy filter_by 来自同一列的多个项目

Google Geochart - 来自JSON数据的同一国家/地区多个值

sql或pyspark中同一列的多个条件

在Oracle SQL中从同一列的不同行中选择多个变量的值