这个问题有些棘手,我希望我能在这个问题上弄清楚自己,因为这不是一个很常见的问题(也许是吗?)。

我有一张桌子,上面有重复的记录,像这样(我说的是几百个):

|   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/

10-11 03:00