-1

次の行になるmysqlクエリがあるとしましょう。

col1data  col2data1  col3data col4data 
col1data  col2data2  col3data col4data  
col1data  col2data3  col3data col4data  

すべての列バー 2 番目の列のデータは同じであることに注意してください。私の質問:クエリを介してこの形式で結果を取得する方法はありますか

col1data col3data col4data col2data1 col2data2 col2data3  

異なるデータを同じ行に置く?

4

2 に答える 2

2

col2レコードを単一の区切られた文字列に結合したい場合は、MySQL の関数を使用してテーブルをグループ化できます。GROUP_CONCAT()

SELECT   col1, col3, col4, GROUP_CONCAT(col2)
FROM     my_table
GROUP BY col1, col3, col4

sqlfiddleで参照してください。

于 2013-07-23T21:05:21.523 に答える
1

本当の問題は、col2data の値がいくつあるか知っていますか?

標準的な答えはgroup_concat()、値を取得するために使用することです:

select col1data, col3data, col4data, group_concat(col2data)
from t
group by col1data, col3data, col4data;

これにより、カンマ区切りのリストが作成されます。カンマの代わりにスペースを含めることができます。

select col1data, col3data, col4data, group_concat(col2data separator ' ')
from t
group by col1data, col3data, col4data;

ただし、それでも 4 つの列しか生成されません。

それぞれに個別の列が必要で、番号がわかっている場合は、次のトリックを使用できますgroup_concat()

select col1data, col3data, col4data,
       substring_index(group_concat(col2data order by col2data), ',', 1), 
       substring_index(substring_index(group_concat(col2data order by col2data), ',', 2), ',', -1),
       substring_index(substring_index(group_concat(col2data order by col2data), ',', 3), ',', -1),
from t
group by col1data, col3data, col4data;

を使用するとsubstring_index()、要素を連結した後でリストから要素を抽出できます。

于 2013-07-23T21:07:47.700 に答える