【问题标题】:Set table column with IF CLAUSE or CASE WHEN使用 IF CLAUSE 或 CASE WHEN 设置表列
【发布时间】:2018-12-21 05:22:45
【问题描述】:

我正在尝试在我的 SQL for DB2 表中创建一个计算字段。我更改了表格添加了新字段。

alter table edi.base_completeness add AF_flg int

我需要将此列设置为根据记录中的其他数据计算得出的值。具体如下。

IF ( [Ship Evnt Cd] is null ) THEN
( 0 )
ELSE IF ( [Ship Evnt Cd] = 'AF' ) THEN 
    ( 1 )
ELSE
    ( 0 )

此外,在这个标志没问题(并定义其他 2 个标志,D_flg 和 X1_flg)之后,我需要另一个使用这些标志的计算字段。

alter table edi.base_completeness add test_missing_event varchar(30)

并用这个逻辑设置。

IF ( total ([AF_flg] for [Ship_Id], [Carr_Cd]) <> 0 and total ([D_flg] for
[Ship_Id],  [Carr_Cd]) = 0 OR [X1_flg] for [Ship_Id],  [Carr_Cd]) = 0  ) THEN
    (  'Missing Delivery' )
ELSE IF ( total ([AF_flg] for [Ship_Id], [Carr_Cd]) = 0 and total ([D_flg]
 for [Ship_Id],  [Carr_Cd]) <> 0 OR [X1_flg] for [Ship_Id],  [Carr_Cd]) <> 0) THEN
    (  'Missing Pickup' )
ELSE IF ( total ([AF_flg] for [Ship_Id], [Carr_Cd]) = 0 and total ([D_flg]
 for [Ship_Id],  [Carr_Cd]) = 0 OR [X1_flg] for [Ship_Id],  [Carr_Cd]) = 0 ) THEN
    ( 'Missing Both' )
ELSE
    ( 'Not Missed' )

我正在尝试使用 UPDATE ... SET 找出代码,然后包含 IF 或 CASE 子句而不是简单 = 但我收到错误,期望创建语句而不是假定的代码。

UPDATE EDI.BASE_COMPLETENESS SET AF_FLG CASE WHEN SHIP_EVNT_CD IS NULL THEN 0 ELSE 1 END; 

需要“create_variable”而不是这个输入

(我希望CASE子句结构合理,而不是错误的原因,但数据只是为了测试的样本,而不是下面的陈述)

这种更新计算列的方法是否正确?应该用触发器来代替吗?

谢谢!

【问题讨论】:

  • 您是要更新字段本身,还是创建(表内)computed column?该错误来自其他方式,甚至忽略了 P.Vernon 指出的语法错误。
  • 事先创建了列。然后尝试更新它。在我创建表格时不知道如何设置它。 P.Vernon 是对的,显然我只是错过了 = 符号。谢谢!

标签: sql if-statement db2 alter


【解决方案1】:

您使用的是哪个版本的 Db2?在 Db2 for LUW 中,您的陈述给出以下错误

SQL0104N An unexpected token "CASE" was found following "PLETENESS SET AF_FLG". Expected tokens may include: "=". SQLSTATE=42601

添加缺少的= 应该可以解决您的问题。

UPDATE EDI.BASE_COMPLETENESS SET AF_FLG = CASE WHEN SHIP_EVNT_CD IS NULL THEN 0 ELSE 1 END

【讨论】:

  • 我怎么看不到缺少的 = 符号...我的错...非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 2020-02-25
  • 2016-02-12
相关资源
最近更新 更多