使用 IF CLAUSE 或 CASE WHEN 设置 table 列

Set table column with IF CLAUSE or CASE WHEN

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

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 )

此外,在这个标志确定后(并定义其他两个,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" expected instead of this input

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

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

谢谢!

您使用的是哪个版本的 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