【问题标题】:MySQL - How to get results of Group_Concat without grouping?MySQL - 如何在不分组的情况下获得 Group_Concat 的结果?
【发布时间】:2012-10-11 06:19:13
【问题描述】:

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

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

【问题讨论】:

    标签: mysql concat


    【解决方案1】:

    尝试在分组集合值上将表连接到自身。 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 Demo

    【讨论】:

      猜你喜欢
      • 2019-10-06
      • 2017-06-08
      • 2010-11-07
      • 1970-01-01
      • 2018-06-07
      • 2017-12-29
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多