SQL:根据行中的第一个字段将2行合并为1行
SQL: combinig 2 rows into 1 row based on the first field in row
我不擅长 sql。我查看了 Whosebug,但似乎对我没有任何用处。所以,我正在寻求帮助。是否可以根据行中的第一个字段将 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
这个查询的输出是。
我需要的是,基于第一个字段 id_product_attribute = 0,将第二行的所有其他信息放到第一行的末尾(没有第二行的第一个字段)
期望的最终结果应该是
我怎样才能做到这一点?我想学习。所以任何想法都是值得赞赏的。
感谢大家的转发。
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
我不擅长 sql。我查看了 Whosebug,但似乎对我没有任何用处。所以,我正在寻求帮助。是否可以根据行中的第一个字段将 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
这个查询的输出是。
我需要的是,基于第一个字段 id_product_attribute = 0,将第二行的所有其他信息放到第一行的末尾(没有第二行的第一个字段)
期望的最终结果应该是
我怎样才能做到这一点?我想学习。所以任何想法都是值得赞赏的。 感谢大家的转发。
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