2012-10-21 47 views
2

所以我有这样的一个表:MySQL - 如何获得没有分组的Group_Concat的结果?

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

尝试将表与自身关联在分组的集合值上。 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 

我测试这在当地获得了预期的结果。

SQLFiddle Demo

+0

这正是我所需要的。这真的有帮助,谢谢。 – user1762473