首页 > 解决方案 > 比较表 A 中的两个数据集并插入表 B

问题描述

我有一个场景。有两个表 TABLE-A 和 TABLE-B。来源是表-A。目的地是表-B。我想将 ID 与自我加入进行比较。如果 ID 匹配,我想确保只选择 NOT NULL 值。如果两条记录都具有 NULL 值,则可以将 Null 值视为输出。

在下面的场景中,TABLE-A 有一个重复的 ID,即 1。在输出中,我将有一个重复记录的值,并智能地合并数据,排除 NULL 值,如果两个记录的任何列都具有 NULL,则将填充 NULL表-B。

表A

ID 名称 地址 电话 状态 PROCESSFLAG
1 你 XYZ NULL NULL 1
2 PQR ABC 123 激活 2
1 你空 322 空 2

输出表 B

ID 名称 地址 电话 状态 PROCESSFLAG
2 PQR ABC 123 激活 2
1 你 XYZ 322 空 2

标签: sql-server

解决方案


您可以group by id为每列选择 max() 以排除空值:

insert into tableb(id, name, address, phone, status, processflag)
select id, max(name), max(address), max(phone), max(status), max(processflag)
from tablea
group by id

我假设您的问题是重复项的空值和非空列在不同行中具有相同的值,或者您想要两个值中的最大值,例如您的样本数据。
请参阅演示
结果:

ID | NAME | ADDRESS | PHONE | STATUS | PROCESSFLAG
-: | :--- | :------ | :---- | :----- | ----------:
 1 | YOU  | XYZ     | 322   | null   |           2
 2 | PQR  | ABC     | 123   | Active |           2

推荐阅读