1

次のステートメントを含む SQL クエリがあります

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

これは field1 の値を返すはずですが、それが '0' の場合、ステートメントは他の 2 つのフィールドの積を返します。

私が抱えている問題は、field1 が NULL の場合、このステートメントが NULL を返すことです。

field1 が '0' の場合と同様に、field1 が NULL の場合にフィールド 2 と 3 の積が返されるように、SQL を修正したいと考えています。

私は次のことを試しました:

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

あなたのクエリはすでにあなたが望むことをしています。である場合field1NULL、商品を返品しますfield2 * field3field2またはのいずれかが の場合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 ;
于 2013-02-13T15:09:13.673 に答える
-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 に答える