用错误解决的案例语句 - 未在预期的地方找到 FROM 关键字

Posted

技术标签:

【中文标题】用错误解决的案例语句 - 未在预期的地方找到 FROM 关键字【英文标题】:Case statement resolved with ERROR - FROM keyword not found where expected 【发布时间】:2015-04-14 12:52:20 【问题描述】:

我尝试执行查询并动态创建一个新列,其值取决于使用 case 语句的其他列。请注意,RATE 是表中不存在的新列。你能告诉我我哪里错了吗?

SELECT PAY_ATTR1.ID,
       PAY_ATTR1.AMOUNT,
       PAY_ATTR1.TAX,
       ISSYNC = CASE WHEN PAY_ATTR1.AMOUNT != PAY_ATTR2.AMOUNT THEN 'DIFF' ELSE NULL END 
FROM PAY_ATTR1
    INNER JOIN PAY_ATTR2
    ON PAY_ATTR1.ID=PAY_ATTR2.ID

ORA-00923:在预期的地方找不到 FROM 关键字

【问题讨论】:

Alias = <expression> 是特定于 SQL Server 的语法,在 Oracle 中,您需要使用标准的 <expression> AS Alias 语法为列指定别名。 我发现在'End'之后,我必须使用AS "Alias",这里别名必须使用双引号,否则它不起作用 【参考方案1】:
SELECT PAY_ATTR1.ID,
       PAY_ATTR1.AMOUNT,
       PAY_ATTR1.TAX,
       CASE WHEN PAY_ATTR1.AMOUNT != PAY_ATTR2.AMOUNT THEN 'DIFF' END as ISSYNC  
FROM PAY_ATTR1
    INNER JOIN PAY_ATTR2
    ON PAY_ATTR1.ID=PAY_ATTR2.ID

【讨论】:

是的,我想到了这个解决方案,问题是我想在其他情况下也使用 ISSYNC 字段,如果我这样做 CASE WHEN PAY_ATTR1.AMOUNT != PAY_ATTR2.AMOUNT THEN 'DIFF' END作为 ISSYNC 并且在我添加其他案例后,例如 CASE WHEN PAY_ATTR1.TAX != PAY_ATTR2.TAX THEN 'DIFF' END as ISSYNC 在这种情况下,它将添加另一个列作为 ISSYNC_1,但我想使用相同的字段。 如果您希望它在同一列中,只需添加更多表达式,例如CASE WHEN PAY_ATTR1.AMOUNT != PAY_ATTR2.AMOUNT THEN 'DIFF' WHEN PAY_ATTR1.TAX != PAY_ATTR2.TAX THEN 'DIFF' END AS ISSYNC【参考方案2】:
SELECT PAY_ATTR1.ID,
       PAY_ATTR1.AMOUNT,
       PAY_ATTR1.TAX,
       CASE WHEN PAY_ATTR1.AMOUNT != PAY_ATTR2.AMOUNT THEN 'DIFF' 
            ELSE NULL 
            END AS ISSYNC
FROM PAY_ATTR1 INNER JOIN PAY_ATTR2 
    ON PAY_ATTR1.ID = PAY_ATTR2.ID

【讨论】:

[ISSYNC] 是(标准)SQL 和 Oracle 中的无效标识符

以上是关于用错误解决的案例语句 - 未在预期的地方找到 FROM 关键字的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 中选择 SEQUENCE:FROM 关键字未在预期的位置找到

我将如何修复这些“ORA-00933:SQL 命令未正确结束”“ORA-00923:未在预期位置找到 FROM 关键字”错误?

oracle sql listagg [重复]

单排网格,高度为1fr,未在Chrome中填充高度

ReactJS - SCRIPT1010:预期标识符 - 生产版本未在 IE11 上运行

didUpdateUserLocation 未在重新加载视图时调用