MySQL:基于列值将数据从多行移动到一行

MySQL:基于列值将数据从多行移动到一行,mysql,sql,Mysql,Sql,我有以下格式的MySQL表。这是我运行的程序的输出,我无法更改它 +---+------------------------+ | | A B C D E | +---+------------------------+ | | model amz wmt abt tgt | | 1 | c3000 100 | | 2 | c3000 200 | | 3 | c3000 150 |

我有以下格式的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 |
+---+-----------------------+
我试着用

我得到的输出是用逗号填的

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

可以使用TRIM和IF将空白值转换为null

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

可以使用TRIM和IF将空白值转换为null

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

之所以使用逗号,是因为在缺少值的位置存储空字符串
'
。如果对缺少的值使用了
NULL
,group_concat()将忽略空值。@BillKarwin我从中加载数据到MySQL的软件发送emtpy字符串,这就是我不能使用NULL的原因。请参阅函数,因为在缺少值的位置存储并清空字符串
'
。如果对缺少的值使用
NULL
,group_concat()将忽略空值。@BillKarwin我将数据加载到MySQL的软件发送emtpy字符串,这就是我不能使用NULL的原因。请参阅函数
SELECT 
    model,
    GROUP_CONCAT(IF(TRIM(wmt) = '', NULL, wmt)),
    GROUP_CONCAT(IF(TRIM(amz) = '', NULL, amz))
FROM
    table_name
GROUP BY model