所以我有一张这样的表:
Item Number Collection Items in Collection
1234 Madison Park
2345 Madison Park
3456 Madison Park
6747 Belcaro
5678 Belcaro
我需要的是:
Item Number Collection Items in Collection
1234 Madison Park 1234, 2345, 3456
2345 Madison Park 1234, 2345, 3456
3456 Madison Park 1234, 2345, 3456
6747 Belcaro 6747, 5678
5678 Belcaro 6747, 5678
或者更好的是,这个:
Item Number Collection Items in Collection
1234 Madison Park 2345, 3456
2345 Madison Park 1234, 3456
3456 Madison Park 1234, 2345
6747 Belcaro 5678
5678 Belcaro 6747
这不是我获得结果的首选方法,但由于客户端规范,需要以这种方式设置表。此外,它需要通过MySQL Workbench Query完成。我已经尝试了我能想到的CONCAT_WS和GROUP_CONCAT的每个变体,但还没有设法提出解决方案。 Group_Concat返回我想要的结果,但随后它将集合分组,这将无效。想法?
答案 0 :(得分:4)
尝试在分组集合值上将表连接到自身。 GROUP_CONCAT()
会返回一个字符串,因此你可以REPLACE()
当前行item_number
,但是你不知道逗号的确切位置,所以虽然它是一个黑客你可以使用SEPARATOR ' '
然后REPLACE()
来自当前行的item_number
,将两个空格的出现替换为一个(item_number
位于中间),TRIM()
它(item_number
在最后),然后用逗号后跟空格替换单个空格:
SELECT i.item_number,
i.collection,
REPLACE(REPLACE(TRIM(REPLACE(g.items, i.item_number, '')), ' ', ' '), ' ', ', ') AS collection_items
FROM item_table i
INNER JOIN
(
SELECT collection,
GROUP_CONCAT(item_number SEPARATOR ' ') AS items
FROM item_table
GROUP BY collection
) g ON g.collection = i.collection
我在本地进行了测试并获得了预期的结果。