使用 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
我正在尝试在我的 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