【发布时间】: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