在Sql-Server 2005上使用Sql management Studio。
我想我的标题不是很清楚,所以虽然我很欣赏一个直接的答案,但更好的是帮助重新设计我可以自己寻找答案并在此过程中学习的问题。
表A包含各种产品的年度总销售额。这张表每年2月/ 3月更新一次。这有两个结果:一个开始在7月份销售的产品,显然今年只有六个月的销售总额。此外,任何新产品在下一年之前都不会出现在其中。
表B是一个例外表,它给出了表A中尚未生成或销售历史少于12个月的所有产品的估算值。
表C将年度销售额与其他表格中的各种信息相结合,并且还包含计算列。
在伪代码中我需要的是:
使用表C中表A中的产品x销售,除非表B中存在此产品的销售。
基本上,表A中的数据应该优先于表A,而A中是否存在记录。
答案 0 :(得分:3)
如果您执行LEFT JOIN
且B
中不存在任何记录,则null
中的列值将为B
。所以对#34;更喜欢" B
中存在的值,使用COALESCE
:
SELECT COALESCE(B.Sales, C.Sales) AS Sales
FROM ...
松散地转换为"如果B
的值为Sales
,请使用它,否则请使用C
中的值。"
技术上表示"从B.Sales
和C.Sales
获得第一个非空值(按此顺序)"