2014-09-10 32 views
0


我有一個表的下面的代碼片段:MySQL的節目分組結果

 
stamp | group | value 
123  | 1  | 4 
124  | 2  | 5 
124  | 2  | 6 
125  | 4  | 7 
125  | 4  | 8 
125  | 5  | 9 

我似乎無法找到一個查詢,給了我這樣的結果:

 
stamp | value1 | value2 
124  | 5  | 6 
125  | 7  | 8 
125  | 9  | null 

所以基本上,顯示所有帶有相同標記的結果,按「組」分組。 這可能嗎?我試圖通過子查詢,'group by'和'having'語句來完成此任務,但我似乎無法找到正確的查詢。

Thnx提前!

+0

123哪裏? – Mihai 2014-09-10 23:34:18

+0

只有一個123,所以我真的不需要它 – Reyske 2014-09-11 08:29:31

回答

0
select stamp, 
     SUBSTR(`values`,1,INSTR(`values`,',')-1) as value1, 
     NULLIF(TRIM(',' FROM SUBSTR(`values`,INSTR(`values`,',')+1)),'') as value2, 
     `values` 
FROM 
(
SELECT stamp, `group`,CONCAT(GROUP_CONCAT(`value`) ,',') AS `values` 
FROM stamps 
GROUP BY stamp, `group` 
) aggr 

Fiddle Demo

這隻有當每個組只有< = 2行。

+0

正是我需要的!謝謝 – Reyske 2014-09-11 08:28:55

1

我認爲你需要這樣的事,或多或少:

SELECT stamp, `group`, GROUP_CONCAT(`value`) AS `values` 
FROM stamps 
GROUP BY stamp, `group` 

的關鍵是GROUP_CONCAT

根據您的數據輸出將

+-------+-------+--------+ 
| stamp | group | values | 
+-------+-------+--------+ 
| 123 |  1 | 4  | 
| 124 |  2 | 5,6 | 
| 125 |  4 | 7,8 | 
| 125 |  5 | 9  | 
+-------+-------+--------+ 
+0

很好的答案!隨着來自Ravisankar的額外調整,這是一個完美的答案。謝謝 ! – Reyske 2014-09-11 09:02:37