我有以下表模式:
create table SerialNo2(
IncarnationID_UID counter primary key,
Mark integer
);现在,我想在表中添加一个新列,我们将其命名为degree。鉴于我想要对production表应用更新,我必须根据degree表中所有现有数据的Mark值填充SerialNo2列。这样做的规则是
if Mark>90 then degree='A',
else degree='B'如何编写一个条件SQL insert来实现上述功能?
发布于 2009-04-07 03:05:29
如下所示:
UPDATE SerialNo2 SET SerialNo2.Degree = IIf([Mark]>90,"A","B")发布于 2009-04-07 03:01:28
首先将度数列定义为可为空,然后执行更新:
UPDATE SerialNo2
SET Degree = CASE WHEN Mark > 90 THEN 'A' ELSE 'B' END发布于 2009-04-07 08:26:49
首先创建新列(ANSI-92查询模式语法):
ALTER TABLE SerialNo2 ADD
Degree CHAR(1) DEFAULT 'B' NOT NULL;如果您立即查询表,您将在新列中获得NULL ...这是引擎IMO中的一个主要错误,即它应该将值设置为每一行的DEFAULT,但是我们现在有一个包含NULLs!!
所以我们必须对每一行的值执行SET操作
UPDATE SerialNo2
SET Degree = IIF(Mark > 90, 'A', 'B');顺便说一下,如果您有多个值要测试,而不是嵌套的IIF,则可以使用SWITCH关键字,对'case else‘子句使用TRUE valeu,例如
UPDATE SerialNo2
SET Degree = SWICTH(
Mark > 90, 'A',
Mark <= 0, 'X',
TRUE, 'B'
);https://stackoverflow.com/questions/724019
复制相似问题