使用 pivot 和 in 子句将行转换为列

Posted

技术标签:

【中文标题】使用 pivot 和 in 子句将行转换为列【英文标题】:Convert rows to columns using pivot and in clause 【发布时间】:2014-11-14 22:32:01 【问题描述】:

我有两张表 t1 和 t2

t1:

object_id date
123       11/10/2014

t2:

object_id   employee_id
123            abc
123            xyz
123            def
456            ghi

我想将结果显示为

123 11/10/2014 abc xyz def
456 11/10/2014 ghi

即每个员工姓名的新列

如何使用 pivot 和 in 子句做到这一点?

【问题讨论】:

能否请您在 sqlfiddle.com 上创建一个示例? 嗨 Dmitry 我不熟悉 sql fiddle 您知道t2 中对于任何特定的object_id 总是最多三行吗?您如何确定如何对这三个值进行排序?是否有特殊原因需要使用 pivot 运算符? @shady 转到 sqlfiddle.com,在顶部的菜单中选择 Oracle 11.2,在左侧为您的表编写语句 create table,使用您的数据填充表的 insert 语句,然后获取链接(在页面底部)并在此处写下此链接。 是否有特殊原因需要使用pivot 运算符?如果您尝试聚合未知数量的字符串,pivot 不是正确的方法。有什么实际需要您使用pivot 而不是其他技术吗? 【参考方案1】:

它不需要枢轴。您可以简单地加入您的表格并使用 listagg 函数。

this link中有一个样本。

http://www.oracle-developer.net/display.php?id=515

在您的示例中,它会像

LISTAGG(employee_id, ',') WITHIN GROUP (ORDER BY object_id) AS employees

【讨论】:

以上是关于使用 pivot 和 in 子句将行转换为列的主要内容,如果未能解决你的问题,请参考以下文章

使用 PIVOT 将行转换为列

在 SQL 中使用“Pivot”将行转换为列

SQL Server - Pivot 将行转换为列(带有额外的行数据)

带有条件的 Oracle SQL Pivot 将行转换为列

BigQuery 标准 SQL 如何将行转换为列

Oracle SQL Developer:如何使用 PIVOT 函数将行转置为列