【问题标题】:ORA-00905 MISSING KEYWORD in case statement..though the syntax is correctORA-00905 MISSING KEYWORD in case statement..虽然语法是正确的
【发布时间】:2014-07-19 05:17:53
【问题描述】:

我收到查询的缺失关键字错误 ORA-00905

SELECT '01_AMT' AS FIELD, COUNT((NVL(AMT,0)) AS CNT FROM  TBL1

UNION ALL

SELECT 

CASE 
WHEN  AMT IS NULL THEN 'NULL'

WHEN AMT<10000 THEN '<10000'

WHEN AMT>= 10000 and AMT<=59999 THEN '10,000-59,999’

ELSE '60,000up' END,


COUNT (1) CNT FROM TBL1

GROUP BY CASE

WHEN  AMT IS NULL THEN 'NULL'

WHEN AMT<10000 THEN '<10000'

WHEN AMT>= 10000 and AMT<=59999 THEN '10,000-59,999’

ELSE '60,000up' END

输出:

FIELD CNT

01_Amt 100000

10,000-59,999 50000

60,000up 50000

第一个字段“01-Amt”应包含第二行中其他计数的总计数和细分。 Amt 是数字数据类型。

【问题讨论】:

  • 这应该会有所帮助:stackoverflow.com/questions/18104884/…
  • 这个999’应该是999'
  • 我的问题已通过更改的勾号解决..你能告诉我它在键盘上的位置..我使用了“输入”按钮旁边的那个..找不到类似的一个在键盘上..
  • Microsoft Word 会自动将正常刻度更改为卷曲刻度。如果您在 word、outlook 或从其他人那里输入了其中的一部分,则应该更改。大多数普通键盘中不存在卷曲勾号。

标签: sql case


【解决方案1】:

您使用的不是标准的结束勾号,而是那个卷曲的勾号。 Oracle 不理解,它忽略了句子的其余部分。更正:

SELECT '01_AMT' AS FIELD, COUNT((NVL(AMT,0)) AS CNT FROM  TBL1

UNION ALL

SELECT 

CASE 
WHEN  AMT IS NULL THEN 'NULL'

WHEN AMT<10000 THEN '<10000'

WHEN AMT>= 10000 and AMT<=59999 THEN '10,000-59,999' <= CHANGED THIS TICK!

ELSE '60,000up' END,


COUNT (1) CNT FROM TBL1

GROUP BY CASE

WHEN  AMT IS NULL THEN 'NULL'

WHEN AMT<10000 THEN '<10000'

WHEN AMT>= 10000 and AMT<=59999 THEN '10,000-59,999' <= CHANGED THIS TICK!

ELSE '60,000up' END

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 2022-12-26
    • 1970-01-01
    • 2017-10-03
    • 2011-04-19
    相关资源
    最近更新 更多