SQL Case Statement - If first 'when' returns null then complete the 2nd 当

SQL Case Statement - If first 'when' returns null then complete the 2nd when

只是想知道是否有人可以帮助我,我是 运行 引用不同 table 的案例陈述。它需要查找汽车的品牌、型号和年份以及位置 (FL、FR、BL、BR) 和 return 套件编号。

对于同一辆车,在 table 中最多可以存在 4 个条目,并在装配位置列中指定要选择的套件编号,以便只有 return 1 个结果,我相信我需要将它放在查询的 where 部分,如果我将它添加到其他任何地方超过 1 个值是 returned。

但是,车辆并不总是存在 4 个条目。套件可以用于 FL & BL 但不能用于 FR 和 BR。因为我将位置列添加到 'null' 部分 returned.Rather 比它 return 什么都没有我想要它 return case 语句的下一部分。

这是 sql 工作的地方,因为有一个套件可用于 FL

SELECT CAST (CASE WHEN '002' != 'UNI'  THEN T0.U_MPLFK ELSE 'NOKIT' END AS VARCHAR)
FROM 
[@CSOL_MILFORD]  T0 INNER JOIN [dbo].[@CSOL_VEHICLES]  T1 ON  T0.[U_VehicleRef]  = T1.[U_VehicleRef] 
WHERE
T1.U_Manufacturer = 'Ford' 
AND 
T1.U_Model = 'Galaxy' 
AND
T0.U_MPLFK > 1
AND
T0.U_FittingPosition = 'FL'

但是当它变为

SELECT CAST (CASE WHEN '002' != 'UNI'  THEN T0.U_MPLFK ELSE 'NOKIT' END AS VARCHAR)
FROM 
[@CSOL_MILFORD]  T0 INNER JOIN [dbo].[@CSOL_VEHICLES]  T1 ON  T0.[U_VehicleRef]  = T1.[U_VehicleRef] 
WHERE
T1.U_Manufacturer = 'Ford' 
AND 
T1.U_Model = 'Galaxy' 
AND
T0.U_MPLFK > 1
AND
T0.U_FittingPosition = 'FR'

我没有得到任何返回值,我想要它 return 'NOKIT'

非常感谢,

罗伊辛

A left join returns 如果 on 条件失败,则包含 null 列的行。因此,您可以将条件移动到 left joinon 部分。类似于:

...
FROM    @CSOL_VEHICLES T1
LEFT JOIN
        @CSOL_MILFORD T0
ON      T0.U_VehicleRef  = T1.U_VehicleRef
        AND T0.U_MPLFK > 1
        AND T0.U_FittingPosition = 'FR'
WHERE   T1.U_Manufacturer = 'Ford' 
        AND T1.U_Model = 'Galaxy' 

on 子句而不是 where 子句中使用条件意味着您将获得带有 nulls 的行而不是没有行。