SQL 中嵌套条件的语法错误

Posted

技术标签:

【中文标题】SQL 中嵌套条件的语法错误【英文标题】:Syntax error for nested condtionals in SQL 【发布时间】:2021-02-17 16:42:01 【问题描述】:

我对 redshift 还很陌生,我一直在尝试在这里的条件下做一个嵌套案例,但我得到一个语法错误

错误:“)”处或附近的语法错误

在这行SQL中:

ELSE ROUND((last_bid * positions), 2))

我不确定出了什么问题,因为我熟悉 Python,而且我很确定这就是嵌套条件的工作原理

SELECT 
    *, 
    CASE
       WHEN asset_type = 'EQUITY' 
          THEN (CASE
                   WHEN positions < 0 THEN ROUND((positions * last_ask), 2)
                   ELSE ROUND((last_bid * positions), 2))
          ELSE ROUND((positions * last_ask/100), 2)
    END AS MARKET_VALUE
FROM 
    base_report

【问题讨论】:

你有两个CASE,但只有一个END 如果任何答案都解决了问题,请接受答案。 【参考方案1】:

你应该像这样结束嵌套的 CASE:

ELSE ROUND((last_bid * positions), 2)
END
)

【讨论】:

【参考方案2】:
SELECT *,
        
    CASE
    WHEN asset_type = 'EQUITY' THEN
    (
    CASE
    WHEN positions < 0 THEN
    ROUND((positions * last_ask), 2)
    ELSE ROUND((last_bid * positions), 2)
    END )
    ELSE ROUND((positions * last_ask / 100), 2)
    END AS MARKET_VALUE
FROM base_report

如果可行,请告诉我

【讨论】:

【参考方案3】:

请试试这个:

SELECT *

     , CASE
        WHEN asset_type ='EQUITY' THEN 
        (CASE
        WHEN positions < 0 THEN ROUND((positions * last_ask),2)
        ELSE ROUND((last_bid * positions),2) end)
        
        ELSE ROUND((positions * last_ask/100),2)
      END  as MARKET_VALUE

FROM base_report

【讨论】:

以上是关于SQL 中嵌套条件的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 3.9 插入行 sql 语法错误

用于计数的嵌套计数查询的 SQL 语法问题?

使用MYSQL时,Grails条件查询失败,语法错误

SQL查询“近场语法错误”

嵌套查询 GraphQL:语法错误 - iOS

SWIG 不扩展嵌套宏“错误:输入中的语法错误 (3)”