2017-04-06 401 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语句前面的事情是你可以用下面的查询,测试空和非空值的所有八个组合进行验证错过了后面的逗号。