CASE WHEN语句中的SQL不等式由于NULL值而无法正常工作

时间:2013-02-13 14:55:35

标签: sql

我有一个SQL查询,其中包含以下语句

SELECT
    (CASE 
        WHEN field1 > 0 THEN field1 
        ELSE (field2 * field3) 
    END) AS result
FROM table

应该返回field1的值,除非它是'0',在这种情况下该语句返回另外两个字段的乘积。

我遇到的问题是,如果field1为NULL,则此语句返回NULL。

我想修改我的SQL,以便字段2&的产品当field1为NULL时返回3,就像field1为'0'时一样。

我尝试了以下内容:

SELECT
    (CASE 
        WHEN field1 > 0 THEN field1 
        WHEN field1 IS NULL THEN (field2 * field3)
        ELSE (field2 * field3) 
    END) AS result
FROM table

但是NULL似乎仍然渗透到语句中,并且每当field1为NULL时仍然返回NULL。

3 个答案:

答案 0 :(得分:4)

您的查询已经是您想要的。当field1NULL时,它会返回产品field2 * field3。如果[{1}}或field2中的任何一个field3NULL,那么(已退回)的产品将为NULL

如果您希望在其中任何一个0时返回某个值(NULL),则可以更改CASE

SELECT
    (CASE 
        WHEN field1 > 0                         -- when field1 > 0
            THEN field1 
        WHEN field2 IS NULL OR field3 IS NULL   -- when field1 = 0 or NULL
            THEN 0
        ELSE field2 * field3 
    END) AS result
FROM table ;

或简单地说:

SELECT
    (CASE 
        WHEN field1 > 0  
            THEN field1 
        ELSE COALESCE(field2 * field3, 0) 
    END) AS result
FROM table ;

答案 1 :(得分:0)

您可以使用COALESCE / IFNULL(SQL Server / MySQL)

轻松:

SELECT
   COALESCE((CASE 
      WHEN field1 > 0 THEN field1 
      ELSE (field2 * field3) 
   END), 0) AS result
FROM table

答案 2 :(得分:-1)

为了帮助您诊断此问题,请使用以下内容:

SELECT
    (CASE 
        WHEN field1 > 0 THEN field1 
        WHEN field1 IS NULL THEN (field2 * field3)
        ELSE (field2 * field3) 
    END) AS result,
    field1, field2, field3

FROM table
WHERE 
   (CASE 
        WHEN field1 > 0 THEN field1 
        WHEN field1 IS NULL THEN (field2 * field3)
        ELSE (field2 * field3) 
    END) IS NULL

问题是什么会立刻显现出来。