SQL:根据行中的第一个字段将2行组合成1行

时间:2016-03-23 17:52:23

标签: mysql rows

我在sql中不擅长。我看着堆栈溢出,但似乎没有什么对我有用。所以,我正在寻求帮助。是否可以根据行中的第一个字段将2行分为1行。

我在mysql中这样做。我将展示这个例子。

这是我的疑问。

SELECT `ps_product_attribute_combination`.`id_product_attribute`,`ps_attribute`.`id_attribute_group`,`ps_attribute_group_lang`.`name`,`ps_product_attribute_combination`.`id_attribute`,`ps_attribute_lang`.`name` 

FROM `ps_product_attribute_combination` 

LEFT JOIN `ps_attribute` 
ON `ps_product_attribute_combination`.`id_attribute`=`ps_attribute`.`id_attribute` 

LEFT JOIN `ps_attribute_lang` 
ON `ps_attribute`.`id_attribute`=`ps_attribute_lang`.`id_attribute` 

LEFT JOIN `ps_attribute_group_lang` 
ON `ps_attribute`.`id_attribute_group`=`ps_attribute_group_lang`.`id_attribute_group` 

WHERE `ps_attribute_lang`.`id_lang`='2' AND `ps_attribute_group_lang`.`id_lang`='2' 

ORDER BY `ps_product_attribute_combination`.`id_product_attribute` ASC, `ps_attribute`.`id_attribute_group` ASC 

此查询的输出是。

enter image description here

我需要的是,基于第一个字段id_product_attribute = 0,将所有其他信息从第二行放到第一行的末尾(没有第二行的第一个字段)

所需的最终结果应为

enter image description here

我怎么能做到这一点?我想学习。所以任何想法都表示赞赏。 感谢所有前进。

1 个答案:

答案 0 :(得分:1)

sqlfiddle

SELECT id_product_attribute,
      SUBSTRING_INDEX(id_attribute_group,',',1) as id_attribute_group,
      SUBSTRING_INDEX(name,',',1) as name,
      SUBSTRING_INDEX(id_attribute,',',1) as id_attribute,
      SUBSTRING_INDEX(name2,',',1) as name2,
      SUBSTRING_INDEX(id_attribute_group,',',-1) as id_attribute_group2,
      SUBSTRING_INDEX(name,',',-1) as name3,
      SUBSTRING_INDEX(id_attribute,',',-1) as id_attribute2,
      SUBSTRING_INDEX(name2,',',-1) as name4
FROM
(SELECT id_product_attribute, 
       GROUP_CONCAT(id_attribute_group) as id_attribute_group,
       GROUP_CONCAT(name) as name,GROUP_CONCAT(id_attribute) as id_attribute,
       GROUP_CONCAT(name2) as name2
FROM T
GROUP BY id_product_attribute)T2