使用SQL合并共享重复字段的两行

时间:2018-11-29 15:50:13

标签: sql merge duplicates

大家下午好

这是我的第一个问题,希望我足够清楚。我正在尝试合并共享相同字段的重复行。并非所有字段都是相似的,但使更多rws唯一的是空值。

举例来说,我得到的结果是:

<table>
  <tr>
    <th>NAME</th>
    <th>ID</th>
    <th>ALIAS 1</th>
    <th>ALIAS 2</th>
  </tr>
  <tr>
    <td>MPE</td>
    <td>3333</td>
    <td>Null</td>
    <td>3</td>
  </tr>
  <tr>
    <td>MPE</td>
    <td>3333</td>
    <td>6</td>
    <td>Null</td>
  </tr>
</table>

还有我想要的结果:

<table>
  <tr>
    <th>NAME</th>
    <th>ID</th>
    <th>ALIAS 1</th>
    <th>ALIAS 2</th>
  </tr>
  <tr>
    <td>MPE</td>
    <td>3333</td>
    <td>6</td>
    <td>3</td>
  </tr>
</table>

这是一个简化的示例,但实际上我的请求更像是:

SQL REQUEST

我为同一ID有多行。我很确定,有一种方法可以通过将空值替换为包含真实值的值,将这些结果合并为一个符号行。

不要急着问您是否需要更高的精度。我真的很感谢你我已经在这个网站上搜索了很多东西,但是没有任何作用...

感谢Yogesh Sharma的回答,我试图将价值观进行分组。但问题是:

由于“ Null”是一个值,因此通过删除“ null”值,按表达式分组不足以合并单元格。最好是一个不以“ null”为值的按表达式分组。

请参见下文:

GROUP BY EXPRESSION RESULT

今天过得很愉快。

Matteo

2 个答案:

答案 0 :(得分:0)

只需进行聚合:

select name, id, max(alias1), max(alias2)
from table t
group by name, id;

编辑:使用案例表达式将文本null视为NULL

select name, id, 
       max(case when alias1 = 'null' then null else alias1 end), 
       max(case when alias2 = 'null' then null else alias2 end)
from table t
group by name, id;

答案 1 :(得分:0)

我认为您可以将表重新结合起来以实现此目的。

类似

select a.Name, a.ID, a.alias_1, b.alias_2

from table a join table b 
on a.ID = b.ID and a.alias_1 != 'Null' and b.alias_2 != 'Null'

尽管如果使用大表可能会在处理上有些繁重