SQL Case语句 - 如果第一个'when'返回null,则完成第二个时间

时间:2015-02-01 11:44:24

标签: sql-server null case-statement

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

同一车辆的表格中最多可存在4个条目,其中拟合位置栏指定要选择的套件编号,以便仅返回1个结果我相信我需要将其放在查询的where部分,如果我在其他任何地方添加它,则返回超过1个值。

然而,车辆总是存在4个条目。 FL& amp; BL但不是FR和BR。因为我将位置列添加到where部分' null'返回。没有返回任何东西,我希望它返回案例陈述的下一部分。

这是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'

我没有重新调整价值,我希望它返回' NOKIT'

非常感谢,

Roisin

1 个答案:

答案 0 :(得分:0)

left join如果null条件失败,则会返回on列的行。因此,您可以将条件移至on的{​​{1}}部分。类似的东西:

left join

... 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而不是行的行。