2017-04-06 116 views
1

我想查詢與下面的查詢亞馬遜紅移數據庫:嵌套查詢NVL問題

NVL(SUM(CASE WHEN (original_price>0) THEN (original_price - sale_price1) 
ELSE (NVL(savings_low,0)) END),0) 

然而,這給出了一個

無效操作:語法錯誤或接近「NVL 「

錯誤。

這是從原來的MySQL查詢,它看起來像這樣調整(以及在MySQL的工作):

IFNULL(SUM(IF(original_price>0, original_price - sale_price1, 
IFNULL(savings_low,0))),0) 

任何人都能看出有什麼不對的,建議修復?

回答

1

你選擇語句的那部分是完全有效的。

with mock_data as 
(
SELECT NULL::integer as original_price, null::integer as sale_price1, null::float as savings_low UNION ALL 
SELECT 100, 50, 0.10 UNION ALL 
SELECT 100, 50, NULL UNION ALL 
SELECT 100, NULL, 0.10 UNION ALL 
SELECT 100, NULL, NULL UNION ALL 
SELECT NULL, 50, 0.10 UNION ALL 
SELECT NULL, 50, NULL UNION ALL 
SELECT NULL, NULL, 0.10 
) 


SELECT NVL(
    SUM(
    CASE WHEN (original_price > 0) 
    THEN (original_price - sale_price1) 
    ELSE (NVL (savings_low,0)) 
    END) 
,0) 
FROM mock_data 

的語法錯誤是在其他地方查詢:我懷疑的是,在你的SELECT語句前面的事情是你可以用下面的查詢,測試空和非空值的所有八個組合進行驗證錯過了後面的逗號。