大家下午好
这是我的第一个问题,希望我足够清楚。我正在尝试合并共享相同字段的重复行。并非所有字段都是相似的,但使更多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>
这是一个简化的示例,但实际上我的请求更像是:
我为同一ID有多行。我很确定,有一种方法可以通过将空值替换为包含真实值的值,将这些结果合并为一个符号行。
不要急着问您是否需要更高的精度。我真的很感谢你我已经在这个网站上搜索了很多东西,但是没有任何作用...
感谢Yogesh Sharma的回答,我试图将价值观进行分组。但问题是:
由于“ Null”是一个值,因此通过删除“ null”值,按表达式分组不足以合并单元格。最好是一个不以“ null”为值的按表达式分组。
请参见下文:
今天过得很愉快。
Matteo
答案 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'
尽管如果使用大表可能会在处理上有些繁重