在按顺序填充下一个值之前,使用条件检查字段是否为null



这目前正在按预期工作,只是我希望它在序列中的下一个值为null时不要填充acctnum。我的问题是在我的FROM FINAL TABLE中尝试下一个if语句时。它一点也不喜欢。这是一个语法问题,我在谷歌上搜索了一下,但没有结果。

CREATE SEQUENCE acct_seq
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO CYCLE
CACHE 24
;
SELECT accntnum  AS new_acct, old_acct
FROM FINAL TABLE (
UPDATE accounts INCLUDE(old_acct INT)
SET accntnum = NEXT VALUE FOR acct_seq, old_acct = accntnum
)
ORDER BY old_acct;

我这样做的原因是为了能同时返回新帐号和旧帐号。i仍然希望返回新的和旧的帐号,即使它们为空。

在表面上,可以通过在UPDATE语句中使用CASE表达式来完成,如

...
UPDATE accounts INCLUDE(old_acct INT)
SET 
  accntnum = CASE WHEN accntnum IS NOT NULL THEN NEXT VALUE FOR acct_seq END, 
...

但是,DB2不允许在CASE表达式中使用NEXT VALUE。由于您只更新accntnum中的非NULL值,因此可以在UPDATE语句中明确指定,并在需要时为未修改的行返回NULL。

SELECT accntnum  AS new_acct, old_acct
FROM FINAL TABLE (
  UPDATE accounts INCLUDE(old_acct INT)
  SET accntnum = NEXT VALUE FOR acct_seq, old_acct = accntnum
  WHERE accntnum IS NOT NULL
)
UNION ALL
SELECT NULL as new_acct, NULL as old_acct
FROM accounts 
WHERE accntnum IS NULL
ORDER BY old_acct;

最新更新