我有两个表tblPostCode (State, SALES_AREA), tblDirectSalesArea AS DSA_HK (SALES_AREA)和一个名为vwPxPAxWeb (SALES_AREA)的视图
我试图用下面的逻辑获取数据
IF dbo.tblPostCode.State IS NULL USE vwPxPaxweb.SALES_AREA,
IF vwPxPaxweb.SALES_AREA IS ALSO NULL THEN USE DSA_HK.SALES_AREA
ELSE USE DSA_HK.SALES_AREA END END AS SALES_AREA_DESC
我使用的SQL查询如下
CASE WHEN dbo.tblPostCode.State IS NULL THEN vwPxPaxweb.SALES_AREA
WHEN vwPxPaxweb.SALES_AREA IS NULL THEN DSA_HK.SALES_AREA ELSE
DSA_HK.SALES_AREA END END AS SALES_AREA_DESC
请注意,表tblDirectSalesArea AS DSA_HK中的数据永远不会为NULL。在最终结果中,字段SALES_AREA_DESC中不应该有任何null。
但是我没有得到我预期的结果,因为在字段SALES_AREA_DESC中出现了null。
我的查询有问题吗?
可以使用COALESCE操作符管理一个嵌套案例。
case when dbo.tblPostCode.State IS NULL
then coalesce(vwPxPaxweb.SALES_AREA, DSA_HK.SALES_AREA )
else DSA_HK.SALES_AREA end as SALES_AREA_DESC
现在,如果DSA_HK。如果SALES_AREA为null,那么无论如何您都会得到一个null
您可能想在这里使用COALESCE
,如下所示:
SELECT
CASE
WHEN dbo.tblPostCode.State IS NULL THEN
CASE
WHEN vwPxPaxweb.SALES_AREA IS NULL THEN DSA_HK.SALES_AREA
ELSE vwPxPaxweb.SALES_AREA
END
ELSE DSA_HK.SALES_AREA
END
FROM <your_data_source>
请注意,这与拉斐尔的答案几乎相同。为了演示嵌套CASE
语句的使用,我只是稍微冗长了一些。
CASE
遵循短路逻辑,在满足第一个条件时停止求值。所以在你最初的实施中,一旦发现dbo.tblPostCode.State
是NULL
,评估就会停止。因此,您需要嵌套序列中下一列的检查,以便正确地对其执行NULL
检查。