2013-03-07 56 views
2

正常查詢如何使用GROUP BY到Concat的字符串在MySQL

id sid string 
5 1 AAA 
6 1 BBB 
7 2 CCC 
8 3 ZZZ 
9 3 EEE 

我想

sid string 
1 1. AAA 2. BBB 
2 1. CCC 
3 1. ZZZ 2. EEE 

你有任何想法怎麼辦?

+1

[你有什麼嘗試?](http://www.whathaveyoutried.com/)請參閱[問問建議](http://stackoverflow.com/questions/ask-advice),請。 – 2013-03-07 14:01:06

+0

在'sid = 3'中,爲什麼分別是'ZZZ'和'EEE'#1和#2,而不是相反呢?或者沒有關係? – eggyal 2013-03-07 14:05:22

+0

沒關係.. – user3214838 2013-03-07 14:07:40

回答

3

可以使用GROUP_CONCAT()函數獲取值成一行,您可以使用用戶定義的變量數量sid組中分配給每個值:

select sid, 
    group_concat(concat(rn, '. ', string) ORDER BY id SEPARATOR ' ') string 
from 
(
    select id, 
    sid, 
    string, 
    @row:=case when @prev=sid then @row else 0 end +1 rn, 
    @prev:=sid 
    from yourtable 
    cross join (select @row:= 0, @prev:=null) r 
    order by id 
) src 
group by sid 

SQL Fiddle with Demo,其結果是:

| SID |  STRING | 
----------------------- 
| 1 | 1. AAA 2. BBB | 
| 2 |  1. CCC | 
| 3 | 1. ZZZ 2. EEE | 
+0

非常感謝@bluefeet – user3214838 2013-03-07 14:17:10

+0

@Cengizhangetking歡迎您! – Taryn 2013-03-07 14:18:26

+0

這是令人難以置信的。我以前使用過group_concat,但從來沒有想過在連接它們的同時對它們進行編號。 – Chandranshu 2014-08-06 07:22:53