首页 > 解决方案 > SQL:组合两个查询结果,它们有一个共同的列,但每个都有自己特定的唯一列

问题描述

我正在努力寻找正确的方法来实现我想要实现的目标。所以这就是我所拥有的:

查询 A 给我以下结果:

培训编号 总通行证
2 5
3 7
4 8

查询 B 给了我以下信息

培训编号 总失败
2 3
6 7
7 9

我想要的结果如下:

培训编号 总通行证 总失败
2 5 3
3 7 空值
4 8 空值
6 空值 7
7 空值 9

我尝试通过将左连接和右连接与联合相结合来模拟 MySQL 中的外部连接,但结果并不是我想要的,但我可以得到最接近的结果。也许我的主要问题是我不知道一个术语来描述我正在尝试做的这个操作到底是什么,所以我不知道要搜索什么。

标签: mysqlsqlunion

解决方案


我会使用完整的外部连接。这是一个例子:

declare @p table (TrainingID int,   totalPass int)
insert into @p
values
(2, 5)
,(3,    7)
,(4,    8)

declare @f table (TrainingID int,   totalFail int)

insert into @f
values
(2, 3)
,(6,    7)
,(7,    9)

select TrainingID = COALESCE(p.TrainingID,f.TrainingID)
    , totalPass = SUM(p.totalPass)
    , totalFail = SUM(f.totalFail)
from @p p
    full outer join @f  f on p.TrainingID=f.TrainingID
group by COALESCE(p.TrainingID,f.TrainingID)

注意:COALESCE 是一个接受第一个非空值的函数。

Result:

TrainingID  totalPass   totalFail
2              5          3
3              7          NULL
4              8          NULL
6              NULL       7
7              NULL       9

推荐阅读