条件插入SQL

时间:2009-04-07 02:57:53

标签: sql ms-access

我有以下表格架构:

create table SerialNo2(
IncarnationID_UID counter primary key,
Mark integer
);

现在我想在表格中添加一个新列,我们称之为degree。鉴于我想在生产表上应用更新,我将必须根据degree表中所有现有数据的Mark值填充SerialNo2列。对此的规则是

if Mark>90 then degree='A',
else degree='B'

如何编写一个可以完成上述功能的条件SQL插件?

3 个答案:

答案 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'
                      );