Sql 如何从同一个表对一个字段进行完全联接,对另一个字段进行内部联接

Sql 如何从同一个表对一个字段进行完全联接,对另一个字段进行内部联接,sql,sql-server,join,Sql,Sql Server,Join,我有一个类似以下内容的查询: select sum(t1.qty) t1Total, sum(t2.qty) t2Total, sum(t1.qty - t2.qty) difference from t1 full join t2 on t1.date = t2.date and t1.chain = t2.chain 我希望它在日期上进行完全连接,但在链上进行内部连接。换句话说,一个表有链,另一个表没有,我不希望额外的链包含在总数中,但我确

我有一个类似以下内容的查询:

select      sum(t1.qty) t1Total, sum(t2.qty) t2Total, sum(t1.qty - t2.qty) difference
from        t1 full join 
            t2 on t1.date = t2.date and t1.chain = t2.chain
我希望它在日期上进行完全连接,但在链上进行内部连接。换句话说,一个表有链,另一个表没有,我不希望额外的链包含在总数中,但我确实希望确保两个表中的链的所有天数都被计算在内


最简单的方法是什么

在总和中使用case语句;当内部表上的链为空时,将其设置为零。例如:

sum(case when t2.chain is null then 0 else t1.qty end) as t1Total

是否可以显示每个表中的几行示例数据以及所需的结果,确保其中包含任意一方为null的情况?“问题”这个词看起来很有趣,但我至少有几个小时没有喝过咖啡因了,所以这不是描述你问题的最佳方式。在where子句中如何?”其中t2.chain不为空。@BrandonMoore,但您不希望这样;这将删除两列的完全连接。我不这么认为。链和日期一起使记录独一无二。显然,我不希望内部联接,因为它可能会排除日期。但我“想”排除不在两者中的链。或者我遗漏了什么?请显示样本数据和期望的结果。同样,“可以排除”和“想要排除”是模糊的描述。实际数据和期望的结果会告诉你一个更清晰的故事。事实上,它们一点也不含糊,但也许你只是在质疑我是否真的用我说的方式表达了我的意思。。。我做到了:)我实际上只是在一个表上执行了一个“selectdistinct-chain”语句,然后将结果硬编码到一个“where-chain(…)”子句中。您的答案的问题是,查询比我的示例更复杂,我必须在我想要包含的每个字段上使用case语句,这并不理想。