T-SQL Case-Then-Else命令在Join中

T-SQL Case-Then-Else命令在Join中,sql,sql-server,left-join,case,Sql,Sql Server,Left Join,Case,首先,我要告诉大家,我只是在学习SQL。我的任务是验证T-SQL生成的报告,该报告由曾为我们公司工作的顾问编写。有人能给我解释一下下面的部分在做什么吗?我理解左外连接的概念,但不理解case语句的计算方法 From ShipmentQty LEFT OUTER JOIN ShipmentCost ON Case when ShipmentQty.RSLDNM <> 0 Then 0 Else ShipmentQt

首先,我要告诉大家,我只是在学习SQL。我的任务是验证T-SQL生成的报告,该报告由曾为我们公司工作的顾问编写。有人能给我解释一下下面的部分在做什么吗?我理解左外连接的概念,但不理解case语句的计算方法

From
ShipmentQty
    LEFT OUTER JOIN ShipmentCost ON
          Case when ShipmentQty.RSLDNM <> 0 Then
0
          Else
            ShipmentQty.SDSHPN
          End = ShipmentCost.FHSHPN
      AND    
          ShipmentQty.RSLDNM = ShipmentCost.FHLDNM
来自
发货数量
左外联接装运成本为ON
发货数量RSLDNM为0时的情况
0
其他的
发货数量SDSHPN
结束=ShipmentCost.fhspn
及
ShipmentQty.RSLDNM=ShipmentCost.FHLDNM

我假设表达式运行时不会出错,但我的任务不是运行SQL,而是验证代码的每个步骤。提前谢谢你,请原谅我的经验不足

这只是意味着如果ShipmentQty.RSLDNM不是0,则使用0,否则,使用ShipmentQty.SDSHPN

如果不使用
案例,则更容易理解逻辑。这可能是等效的逻辑:

From ShipmentQty LEFT OUTER JOIN
     ShipmentCost
     ON ((ShipmentCost.FHSHPN = 0 AND ShipmentQty.RSLDNM <> 0) OR
         (ShipmentCost.FHSHPN = ShipmentQty.SDSHPN AND ShipmentQty.RSLDNM = 0)
        ) AND
        ShipmentQty.RSLDNM = ShipmentCost.FHLDNM
自发货数量左外连接
运费
在((ShipmentCost.fhspn=0和ShipmentQty.RSLDNM 0)或
(ShipmentCost.FHSPN=ShipmentQty.SDSHPN和ShipmentQty.RSLDNM=0)
)及
ShipmentQty.RSLDNM=ShipmentCost.FHLDNM

我之所以说“可能”,是因为这没有考虑
ShipmentQty.RSLDNM
NULL
值。因此,如果
RSLDNM
为零,则比较为
fhspn
SDSHPN
。如果
RSLDNM
不是零,则
fhspn
需要为零。

联接很简单,情况只是一个条件(),当字段ShipmentQty.RSLDNM为0时,联接将使用0作为值,否则联接将使用ShipmentQty.SDSHPN作为值