Oracle - 通过左连接将多行组合到列

Posted

技术标签:

【中文标题】Oracle - 通过左连接将多行组合到列【英文标题】:Oracle - combining multiple rows to columns via left join 【发布时间】:2012-09-09 02:44:13 【问题描述】:

我正在做一个小型项目来学习一些 SQL。我目前在将多行组合成列时遇到了一些困难。

我要清理的表是

GroupID 产品属性 1 属性 2
100 1 蓝色 红色
100 2金蓝
101 1 粉蓝色
101 2 黑 白
101 3紫灰

我想要生成的是一个只有唯一 groupID 的表,所以:

组 ID Product1 pr1Attribute 1 pr1Attribute2 Product2 pr2Attribute1 pr2Attribute2 Product3 pr3Attribute1 pr3Attribute2 

行数据:

100 1 蓝红 2 金蓝 null null null
101 1粉蓝2黑白3紫灰

我已经尝试了以下

select distinct full.groupid, product1.product as product1,
    product1.attr1 as product1_attrib1, product1.attr2 as product1_attrib2,
    product2.product as product2, product2.attr1 product2_attribute1, 
    product2.attr2 product2_attribute2, product3.product as product3, 
    product3.attr1 as product3_attrib1, product3.attr2 as product1_attrib2
from tabletest full
left join tabletest product1 on (full.groupid = product1.groupid and product1.producttem = '1')
left join tabletest product2 on (full.groupid = product1.groupid and product2.producttem = '2')
left join tabletest product3 on (full.groupid = product1.groupid and product3.producttem = '3');  

查询无法正常工作。它似乎没有考虑到AND 或以某种方式重复。

任何指导将不胜感激。我还想知道是否有一种方法可以实现这一点,这样我就不会“知道”任何产品编号(所以基本上我不必硬编码它们)。

【问题讨论】:

您要搜索的词是:PIVOT。有比三重自连接更有效的方法。 【参考方案1】:

我认为您有一个简单的复制/粘贴错误:表 product2 和 product3 的连接条件在其连接条件的第一部分错误地引用了 product1 的 ID。

left join tabletest product1 on (full.groupid = product1.groupid and product1.producttem = '1')
left join tabletest product2 on (full.groupid = product2.groupid and product2.producttem = '2')
left join tabletest product3 on (full.groupid = product3.groupid and product3.producttem = '3');

【讨论】:

天哪!感谢那。我盯着它看了很久,试图弄清楚发生了什么。完全的菜鸟错误。你知道我如何在不明确说明有哪些产品的情况下实现这一点吗? @user1523257 这很棘手 - 看看这篇文章 (link)。

以上是关于Oracle - 通过左连接将多行组合到列的主要内容,如果未能解决你的问题,请参考以下文章

如何将mysql内部连接结果从行分组到列

SQL将多行左连接成一行

oracle 左外连接如果右表中有重复数据如何处理?

mysql命令总结

如何使 React Table 中的某些列左对齐和某些列居中对齐 - React

sql 各种连接的使用条件,