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                 

これは結果を取得するための私の好ましい方法ではありませんが、クライアントの仕様により、テーブルをこのように設定する必要があります。また、MySQLWorkbenchクエリを介して実行する必要があります。私は考えられるCONCAT_WSとGROUP_CONCATのすべてのバリエーションを試しましたが、解決策を思い付くことができませんでした。Group_Concatは必要な結果を返しますが、コレクションをグループ化します。これは機能しません。アイデア?

4

1 に答える 1

4

グループ化されたコレクション値でテーブルをそれ自体に結合してみてください。GROUP_CONCAT()は文字列を返すのでREPLACE()、現在の行item_numberをその上に置くことができますが、カンマがどこにあるか正確にはわからないため、使用できるハックですがSEPARATOR ' '、現在REPLACE()item_number行から、2つのスペースの出現箇所を置き換えます1つ(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 に答える