【问题标题】:Merge two rows that share duplicate field using sql使用sql合并共享重复字段的两行
【发布时间】:2019-05-01 17:44:27
【问题描述】:

大家下午好,

这是我的第一个问题,我会很清楚。我正在尝试合并共享某些相同字段的重复行。并非所有字段都相似,但产生更多 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" 是一个值,group by 表达式不足以通过删除 "null" 值来合并单元格。最好是不将“null”作为值的按表达式分组。

见下文:

GROUP BY EXPRESSION RESULT

祝你有美好的一天。

马特奥

【问题讨论】:

  • 我删除了不兼容的数据库标签。请仅使用您真正使用的数据库进行标记。

标签: sql merge duplicates


【解决方案1】:

只做聚合:

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

EDIT :使用 case 表达式将文本 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;

【讨论】:

  • 您好,非常感谢您的快速回答。不幸的是。由于“Null”是一个值,group by 表达式不足以通过删除“null”值来合并单元格。最好是不将“null”作为值的按表达式分组。
  • @MatteoOcchipinti。 . .您需要在 max() 函数中使用 case 表达式。
  • 我认为它有点复杂,因为我已经使用了 MAX 和 CASE 来透视表。在旋转表格之前,没有空值,所有行都是具有不同日期的重复行,我将其旋转以使所有日期都在同一行中。但也许我的问题没有很好地提出。我会改进它并改变它。我什么时候放假回来。祝您有美好的一天,非常感谢您的帮助!马特奥
【解决方案2】:

我认为您可以将表连接回自身以实现此目的。

类似

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'

虽然如果您使用大型表,这可能对处理有点繁重

【讨论】:

  • 我认为它有点复杂,因为我已经使用了 MAX 和 CASE 来透视表。在旋转表格之前,没有空值,所有行都是具有不同日期的重复行,我将其旋转以使所有日期都在同一行中。但也许我的问题没有很好地提出。我会改进它并改变它。我什么时候放假回来。祝您有美好的一天,非常感谢您的帮助!马特奥
猜你喜欢
  • 2013-04-06
  • 2021-10-13
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 1970-01-01
相关资源
最近更新 更多