mysql - 如何将重复的记录合并为一个

标签 mysql sql database

这个问题有点棘手,我希望我能在这个问题上说清楚,因为这不是很常见的问题(或者也许是?)。

我有一个表,其中有像这样的重复记录(我说的是数百个):

|   Code|Route|State|City|Start| End|Style|
|-----------------------------------------|
|    R14|   14|   NL| MTY|  Ind|Main| High|
| R14-01|   14|   NL| MTY|  Ind|Main| High|
|  R15-1|   15|   NL| MTY|  Cal| Cle|  Low|
|   R15B|   15|   NL| MTY|  Cal| Cle|  Low|
|  R14-2|   14|   NL| MTY|  Ind|Main| High|
| RT15th|   15|   NL| MTY|  Cal| Cle| High|
|  RT15°|   15|   NL| MTY|  Cal| Cle| High|
|  R15.3|   15|   NL| MTY|  Cal| Cle|  Low|
| RT15/H|   15|   NL| MTY|  Cal| Cle| High|

我需要得到这样的答案:

| Code|Route|State|City|Start| End|Style|
|---------------------------------------|
|  R14|   14|   NL| MTY|  Ind|Main| High|
|  R15|   15|   NL| MTY|  Cal| Cle|  Low|
| RT15|   15|   NL| MTY|  Cal| Cle| High|

我已经创建了按路线、州、城市、开始、结束和样式对结果进行分组的查询;这是非常简单的部分。

SELECT DISTINCT Route, State, City, Start, End, Style FROM Routes;

如果您可以看到代码列是唯一导致问题的列。我需要按类似代码对该列进行分组(交叉字符及其位置 R14、R14-01、R14-2 => R14 和 R15-1、R15-2 = > R15- 和 R15、R15-1 => R15)

知道如何获得这些交叉点吗?

澄清一下代码列是一团糟,有很多字符用作限制符。该表并没有那么短,我正在谈论数千条记录,其中一些存在这个问题。我稍微扩大了表格,以便您可以更好地了解我要完成的任务。

最佳答案

你可以这样做:

select (case when code in ('R14', 'R14-01', 'R14-2') then 'R14'
             when code in ('R15-1', 'R15-2') then 'R15-'
             when code in ('R15', 'R15-1') then 'R15'
             else code
        end) as newcode, Route, State, City, Start, End, Style
from t
group by newcode, Route, State, City, Start, End, Style;

我注意到 R15-1 被分配到两个类别。

关于mysql - 如何将重复的记录合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50421110/

相关文章:

mysql - 聚合数据时在选择查询中使用单引号?

MySql 在一条语句中查找3个表中是否存在记录

php - 如何在旧版 PHP 上启用 mysql?

mysql - 根据MySQL中不同表中某些列的值匹配两列

php - 删除除最后一行之外的重复行

mysql - 重命名mysql数据库?

mysql - SQL - 触发器和意外事件

mysql - 使用自动递增主键插入到 View 中?

php - 是否可以更改从 mysql 获取的结果,例如使用 as 关键字更改列

python - 如何在两个 Django 应用程序之间移动模型(Django 1.7)