mysql - 如果字段为空,则将 MySQL 行与前一行合并

标签 mysql csv where-clause rows

我正在尝试获取一个 MySQL 数据库,其描述分布在多行(从 CSV 文件导入),并将除描述之外的所有内容都为空白的行组合起来,以完成描述字段。

从这里开始:

ID    PLU     Description
100   1       Line 1
101           Line 2
102   2       Line 3
103   3       Line 4
105           Line 5
106           Line 6

尝试将其变成这样:

ID    PLU     Description
100   1       Line 1 Line 2
102   2       Line 3
103   3       Line 4 Line 5 Line 6

如有任何想法,我们将不胜感激。

编辑: 为了添加一些背景,我收到了一份价目表,格式为 CSV,不幸的是我无法更改传入格式。如果某个项目的描述太长,它将在下一个单元格中继续,留下许多行,只包含描述。我正在寻找一种方法,将独立的描述行附加到作为有效行一部分的描述中。如果在数据仍然是 CSV 的情况下有更简单的方法来做到这一点,我也绝对愿意这样做。

最佳答案

请参阅我的原始评论,但这可能有效:

SET @prevPLU := 0;
SET @firstID := 0;
SELECT MIN(ID) AS ID
, @prevPLU := IF(PLU='',@prevPLU, PLU) AS actualPLU
, GROUP_CONCAT(Description ORDER BY ID SEPARATOR ' ') AS Description
FROM theTable
GROUP BY actualPLU
;

关于mysql - 如果字段为空,则将 MySQL 行与前一行合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32233227/

相关文章:

mysql - 由于 WHERE 而没有限制列表的 SQL 计数函数

sql - SQLite 中 WHERE 子句中的聚合函数

mysql - ActiveRecord 数据库连接的回调?

java - 日期格式 JSON

mysql - SQL 查询花费的时间太长

javascript - Highcharts 在 Firefox 中不显示

Python将Excel 2004 xml转换为csv(或excel)

java - 在Android中更新CSV文件后更新Listview

mysql - LEFT JOIN 不返回左侧表中的所有记录

MySQL 查询将首次连接限制为特定行数