2017-01-11 110 views
0

我有以下格式的MySQL表。這是我運行的程序的輸出,我無法更改它。MySQL:根據列值將數據從多行移動到一行

+---+------------------------+ 
| | A B C D E | 
+---+------------------------+ 
| | model amz wmt abt tgt | 
| 1 | c3000 100    | 
| 2 | c3000  200   | 
| 3 | c3000   150  | 
| 4 | c3000    125 | 
| 5 | A1234    135 | 
| 6 | A1234  105   | 
+---+------------------------+ 

我想根據第1列即模型中的值將所有行移動到一行中。需要說明的是空白行是不實際的空白,幷包含一個空字符

所需的輸出:

+---+-----------------------+ 
| | A B C D E | 
+---+-----------------------+ 
| | model amz wmt abt tgt | 
| 1 | c3000 100 200 150 125 | 
| 2 | A1234 200 105  135 | 
+---+-----------------------+ 

我嘗試使用

select model,group_concat(wmt),group_concat(amz)  
from table_name 
group by model 

而我得到的輸出充滿逗號

+---+----------------------------------+ 
| | A     B   | 
+---+----------------------------------+ 
| | model amz   wmt   | 
| 1 | c3000 ,,,,100,,,, ,,,200,,,, | 
| 2 | A1234 ,,200,,,,,, ,105,,,,,, | 
+---+----------------------------------+ 
+0

你得到的逗號是因爲你存儲了空字符串''''那裏有一個缺失值。如果你使用NULL作爲缺失值,group_concat()會忽略空值。 –

+0

@BillKarwin我將數據加載到MySQL的軟件會發送一些靜態字符串,這就是爲什麼我不能使用NULL的原因。 –

+0

查看函數[NULLIF()](http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_nullif) –

回答

1

您可以使用TRIM和IF將空白值轉換爲空值。

SELECT 
    model, 
    GROUP_CONCAT(IF(TRIM(wmt) = '', NULL, wmt)), 
    GROUP_CONCAT(IF(TRIM(amz) = '', NULL, amz)) 
FROM 
    table_name 
GROUP BY model 
+0

這可以工作。謝謝 –

1
SELECT 
    model, 
    MIN(amz) AS amz, 
    MIN(wmt) AS wmt, 
    MIN(abt) AS abt, 
    MIN(tgt) AS tgt 
FROM 
    table_name 
GROUP BY 
    model 
相關問題