【问题标题】:Case Statement Illegal Expression SQLCase 语句非法表达式 SQL
【发布时间】:2021-12-27 11:39:42
【问题描述】:

通过在 Teradata SQL 中运行此 sn-p,我不知道错误消息“CASE 表达式的 WHEN 子句中的非法表达式”来自何处

CASE 
  WHEN f_ev1.PROCESS_NO IN 
    (
      SELECT
        numbers.PROCESS_NO
      FROM numbers
      WHERE 
        numbers.FLAG = 1
      GROUP BY 1 --no duplicates
    ) THEN 2
END AS Status,

如果我写 IN (some numbers) 它工作得很好。但它是一个包含 50 个可能随时间变化的唯一值的列表。

【问题讨论】:

标签: sql case teradata


【解决方案1】:

我的建议是您可以将这 50 个值加载到另一个表中,然后将该表与主表连接起来

table_50 - 具有 50 个唯一值的表 main_tbl - 主表

insert into table_50 ( process_no ) SELECT numbers.PROCESS_NO FROM numbers WHERE numbers.FLAG = 1 GROUP BY 1 ;

Select case when b.process_no is null then 2  end as status from main_table a
left join table_50 b
on a.process_no= b.process_no

从性能的角度来看,这样更有效,您还可以根据自己的要求更新 table_50 中的值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    相关资源
    最近更新 更多