【发布时间】: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。有比三重自连接更有效的方法。