2

所以我有一张这样的桌子:

  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 返回我想要的结果,但随后它将集合分组,这将不起作用。想法?

4

1 回答 1

4

尝试在分组集合值上将表连接到自身。GROUP_CONCAT()将返回一个字符串,因此您可以REPLACE()在其上显示当前行item_number,但是您不知道逗号的确切位置,因此尽管您可以使用 hack 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

我在本地对此进行了测试并得到了您的预期结果。

SQLFiddle 演示

于 2012-10-21T02:56:44.823 回答