2

I need to assign an incrementing value to each string from the concatenated row starting at 0 for each row in the result.

Here's a simplified data sample:

number|color
1     |red
1     |blue
1     |orange
2     |brown
3     |purple
3     |yellow

This is the result that I need:

number|color_set
1     |0 red,1 blue,2 orange
2     |0 brown
3     |0 purple,1 yellow

This is the result that I get:

number|color_set
1     |0 red,1 blue,2 orange
2     |3 brown
3     |4 purple,5 yellow

This is what I've been trying:

SET @x:=0;

SELECT number, GROUP_CONCAT(@x:=@x+1,' ',color SEPARATOR ',')
FROM table
GROUP BY number;

The variable needs to be reset to 0 for each result row. I'm no expert obviously and I'm new to the site so any help is much appreciated.

Thanks,

Jay

4

4 に答える 4

3

私はこれが答えられたことを知っていますが、これはより簡単な方法ではありませんか? 選択に @x:=0 を追加するだけですか?

@x:=0; を設定します。

SELECT 番号, GROUP_CONCAT(@x:=@x+1,' ',color SEPARATOR ','),@x:=0 FROM テーブル GROUP BY 番号;

于 2014-08-21T15:01:38.613 に答える
0

また、ただの楽しみのために...

SELECT
number,
GROUP_CONCAT(CONCAT(counter, ' ', color)) 
FROM (
SELECT
number,
color,
@counter := CASE WHEN @prev = number THEN @counter + 1 ELSE 0 END AS counter,
@prev := number
FROM
yourTable yt
, (SELECT @counter:=0, @prev:=NULL) vars
) sq
GROUP BY number
  • sqlfiddleでライブで動作するのを見てください
于 2013-07-19T09:31:29.103 に答える
0

2ステップで解決してみてはいかがでしょうか? それとも、1 つの SQL クエリのみである必要がありますか?

  1. (id, color) で一時テーブルを作成し、id を自動インクリメントとして宣言し、自動インクリメントの開始を 0 に設定します ( ALTER TABLE tbl AUTO_INCREMENT = 0;)
  2. 変換するレコードを選択して挿入し ( INSERT INTO ttTable SELECT color FROM datatable WHERE number = 3)、それらを読み戻し、 を介してリストを生成しますGROUP_CONCAT。元のテーブルのすべての数値に対して、この手順を繰り返す必要があります。
于 2013-07-19T09:12:54.343 に答える