我有以下表格架构:
create table SerialNo2(
IncarnationID_UID counter primary key,
Mark integer
);
现在我想在表格中添加一个新列,我们称之为degree
。鉴于我想在生产表上应用更新,我将必须根据degree
表中所有现有数据的Mark
值填充SerialNo2
列。对此的规则是
if Mark>90 then degree='A',
else degree='B'
如何编写一个可以完成上述功能的条件SQL插件?
答案 0 :(得分:5)
这样的事情:
UPDATE SerialNo2 SET SerialNo2.Degree = IIf([Mark]>90,"A","B")
答案 1 :(得分:3)
首先将degree列定义为可为空,然后执行UPDATE:
UPDATE SerialNo2
SET Degree = CASE WHEN Mark > 90 THEN 'A' ELSE 'B' END
答案 2 :(得分:0)
首先创建新列(ANSI-92查询模式语法):
ALTER TABLE SerialNo2 ADD
Degree CHAR(1) DEFAULT 'B' NOT NULL;
如果您立即查询表格,那么新列中将有NULL
...这是引擎IMO中的主要错误,即它应该为每行设置DEFAULT
的值但是我们现在有一个NOT NULL
列,其中包含NULL
s !!
所以我们必须SET
每行的值
UPDATE SerialNo2
SET Degree = IIF(Mark > 90, 'A', 'B');
顺便说一句,如果你有多个要测试的值,而不是嵌套的IIF
,你可以使用SWITCH关键字,使用TRUE valeu作为'case else'子句,例如
UPDATE SerialNo2
SET Degree = SWICTH(
Mark > 90, 'A',
Mark <= 0, 'X',
TRUE, 'B'
);