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 join
的 on
部分。类似于:
...
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
的行而不是没有行。
只是想知道是否有人可以帮助我,我是 运行 引用不同 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 join
的 on
部分。类似于:
...
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
的行而不是没有行。