首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件插入SQL

问条件插入SQL
EN

Stack Overflow用户
提问于 2009-04-07 02:57:53
回答 3查看 604关注 0票数 0

我有以下表模式:

代码语言:javascript
复制
create table SerialNo2(
IncarnationID_UID counter primary key,
Mark integer
);

现在,我想在表中添加一个新列,我们将其命名为degree。鉴于我想要对production表应用更新,我必须根据degree表中所有现有数据的Mark值填充SerialNo2列。这样做的规则是

代码语言:javascript
复制
if Mark>90 then degree='A',
else degree='B'

如何编写一个条件SQL insert来实现上述功能?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-07 03:05:29

如下所示:

代码语言:javascript
复制
UPDATE SerialNo2 SET SerialNo2.Degree = IIf([Mark]>90,"A","B")
票数 5
EN

Stack Overflow用户

发布于 2009-04-07 03:01:28

首先将度数列定义为可为空,然后执行更新:

代码语言:javascript
复制
UPDATE SerialNo2
SET Degree = CASE WHEN Mark > 90 THEN 'A' ELSE 'B' END
票数 3
EN

Stack Overflow用户

发布于 2009-04-07 08:26:49

首先创建新列(ANSI-92查询模式语法):

代码语言:javascript
复制
ALTER TABLE SerialNo2 ADD 
   Degree CHAR(1) DEFAULT 'B' NOT NULL;

如果您立即查询表,您将在新列中获得NULL ...这是引擎IMO中的一个主要错误,即它应该将值设置为每一行的DEFAULT,但是我们现在有一个包含NULLs!!

所以我们必须对每一行的值执行SET操作

代码语言:javascript
复制
UPDATE SerialNo2 
   SET Degree = IIF(Mark > 90, 'A', 'B');

顺便说一下,如果您有多个值要测试,而不是嵌套的IIF,则可以使用SWITCH关键字,对'case else‘子句使用TRUE valeu,例如

代码语言:javascript
复制
UPDATE SerialNo2 
   SET Degree = SWICTH(
                       Mark > 90, 'A', 
                       Mark <= 0, 'X', 
                       TRUE, 'B'
                      );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/724019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档