我有一个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。
答案 0 :(得分:4)
您的查询已经是您想要的。当field1
为NULL
时,它会返回产品field2 * field3
。如果[{1}}或field2
中的任何一个field3
为NULL
,那么(已退回)的产品将为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
问题是什么会立刻显现出来。