2013-02-13 69 views
0

我有一個SQL查詢,其中包括以下語句在CASE WHEN語句不工作,由於NULL 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似乎仍然通過語句和NULL滲透每當FIELD1爲NULL仍然返回。

+0

首先檢查「NULL」。 – Kermit 2013-02-13 14:56:37

+5

你確定'field2'或'field3'不是'NULL'嗎? – Dukeling 2013-02-13 14:56:56

+2

您的查詢已經是你想要的了。當'field1'爲'NULL'時,它返回產品'field2 * field3'。如果它們中的任何一個通過'field2'或'field3'也是'NULL',則(返回的)產品將是'NULL'。 – 2013-02-13 15:05:32

回答

4

您的查詢已經是你想要的了。當field1NULL時,它返回產品field2 * field3。如果field2field3之一雖然是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 ; 
+0

謝謝 - 你是對的 - 我在錯誤的地方尋找錯誤 - 這是另外兩個有時包含NULL的字段 – PJW 2013-02-13 15:26:07

-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 

它將立即成爲apparrent的問題是什麼。

0

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

Easy as:

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