插入值时使用case子句

  • 本文关键字:case 子句 插入 sql db2
  • 更新时间 :
  • 英文 :


所以我有这个insert语句,在设置number1&number2列。我在insert语句的values部分使用了case-when语句。在设置这两列时,有没有更好的方法可以在不重复代码的情况下做到这一点。

INSERT INTO history (
user_id
,number1
,number2
)
VALUES (
'user1'
,CASE 
WHEN (
SELECT user_id
FROM old_history
WHERE user_id = 'user1'
) IS NOT NULL
THEN 12.3
ELSE NULL
END
,CASE 
WHEN (
SELECT user_id
FROM old_history
WHERE user_id = 'user1'
) IS NOT NULL
THEN 15
ELSE NULL
END
);

谢谢。

当没有匹配时,聚合函数可以方便地返回NULL。所以,我认为这是最简单的方法:

INSERT INTO history (user_id, number1, number2)
SELECT 'user1', MAX(12.3), MAX(15)
FROM old_history
WHERE user_id = 'user1';

聚合函数MAX()的使用使其成为一个聚合查询,保证返回1行。当不存在匹配行时,第二列和第三列是NULL

试试这个:

INSERT INTO history (user_id, number1, number2)
SELECT 
'user1'
, case when count(1)=1 then 12.3 end
, case when count(1)=1 then 15   end
FROM old_history
WHERE user_id = 'user1';

最新更新