2017-01-11 86 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 
相关问题