1

我有一个包含以下语句的 SQL 查询

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

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

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

我想修改我的 SQL,以便在 field1 为 NULL 时返回字段 2 和 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 仍然会被返回。

4

3 回答 3

4

您的查询已经完成了您想要的。何时返回field1产品。如果其中之一是,则(退回的)产品将为。NULLfield2 * field3field2field3NULLNULL

如果您想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 ;
于 2013-02-13T15:09:13.673 回答
0

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

简单如:

SELECT
   COALESCE((CASE 
      WHEN field1 > 0 THEN field1 
      ELSE (field2 * field3) 
   END), 0) AS result
FROM table
于 2017-04-12T13:20:36.597 回答
-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

问题是什么将立即变得显而易见。

于 2013-02-13T14:58:54.943 回答