内连接:内连接不同表中的值之和,两边都没有命中时为0
Posted
技术标签:
【中文标题】内连接:内连接不同表中的值之和,两边都没有命中时为0【英文标题】:Inner Join: Sum of values in different tables with inner join and 0 when no hit on both sides 【发布时间】:2019-12-10 11:59:20 【问题描述】:我使用 MS-SQL 并有以下两个表,我想在其中提取值以在一个 SQL 查询中创建第三个表。
这里的答案对我有帮助,但还不够。
sql sum data from multiple tables
对我来说同样重要的是,当没有注销或没有注册但注销(错误地)时,我必须为此获得值 0,因此我还需要在两个表中都没有命中的结果,但是只有一个。
是否有可能在一个 SQL 查询中得到这个结果?
注册
[ATE] [Article] [Description] [Registered]
------------------------------------------
[1111] [MS1234] [SCREW] [500]
[2222] [MS1234] [SCREW] [600]
[2222] [AB9999] [BOLT] [100]
[3333] [XYZ123] [PAINT] [900]
[4444] [LMU232] [TOOL] [120]
DEREG
[ATE] [Article] [Description] [Deregistered]
------------------------------------------
[1111] [MS1234] [SCREW] [260]
[3333] [XYZ123] [PAINT] [900]
[4444] [LMU232] [TOOL] [20]
[9999] [TUM933] [SHIM] [5000]
RES
[ATE] [Article] [Description] [Registered] [Deregistered] [Rest]
--------------------------------------------------------------------------
[1111] [MS1234] [SCREW] [500] [260] [240]
[2222] [MS1234] [SCREW] [600] [0] [600]
[2222] [AB9999] [BOLT] [100] [0] [100]
[3333] [XYZ123] [PAINT] [900] [900] [0]
[4444] [LMU232] [TOOL] [120] [20] [100]
[9999] [TUM933] [SHIM] [0] [5000] [-5000]
【问题讨论】:
你能告诉我们你到目前为止所做的尝试吗?以及为什么它不起作用。 【参考方案1】:在 SQL Server 中,您可以full outer join
获取来自两个表的记录:
select
coalesce(r.ate, d.ate) ate,
coalesce(r.article, d.article) article,
coalesce(r.description, d.description) description,
coalesce(r.registered, 0) registered,
coalesce(d.deregistered, 0) deregistered,
coalesce(r.registered, 0) - coalesce(d.deregistered, 0) rest
from reg r
full outer join dereg d on d.ate = r.ate and d.article = r.article
Demo on DB Fiddle:
吃了|文章 |描述 |已注册 |注销|休息 ---: | :-------- | :------------ | ---------: | ------------: | ----: 1111 | MS1234 |螺丝 | 500 | 260 | 240 第2222章MS1234 |螺丝 | 600 | 0 | 600 第2222章AB9999 |螺栓 | 100 | 0 | 100 第3333章XYZ123 |油漆 | 900 | 900 | 0 4444 | LMU232 |工具 | 120 | 20 | 100 9999 | TUM933 |垫片 | 0 | 5000 | -5000【讨论】:
不幸的是,我收到消息“sql missing operator in query expression 'coalesce(r.ate, d.ate) ate' @ManfredSinger:我刚刚修正了一个错字(缺少逗号),现在可以使用了吗? 我已经看到这个并用逗号尝试过,但它不起作用。 @ManfredSinger:这似乎工作正常。我在答案中添加了一个 db fiddle 供您参考。您使用的是 ms-access(错误消息似乎表明)还是 sql-server(您用它标记了问题)?full join
在 ms-access 中不受支持。
在这种情况下,我使用 ODBC for Excel。内连接有效,但不是完全外连接以上是关于内连接:内连接不同表中的值之和,两边都没有命中时为0的主要内容,如果未能解决你的问题,请参考以下文章