MySQL:基于列值将数据从多行移动到一行
我有以下格式的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 |
+---+------------------------+
| | 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