Sql 基于另一列填充列

Sql 基于另一列填充列,sql,Sql,我试着为考试做一张表,它看起来像: ExamID |姓名|分数|等级 其中点等于0到100之间的某个值。现在我想根据点的值自动设置等级的值。如果>90级=A sql查询执行此操作的基本语法是什么?反正以后我会根据自己的需要来调整的 尝试使用大小写语法,但无法执行。我猜我应该使用更新查询,而不是插入查询。首先构建模式 **TABLE** CREATE TABLE Examgrades ( Examid int auto_increment primary key,

我试着为考试做一张表,它看起来像:

ExamID |姓名|分数|等级

其中点等于0到100之间的某个值。现在我想根据点的值自动设置等级的值。如果>90级=A

sql查询执行此操作的基本语法是什么?反正以后我会根据自己的需要来调整的

尝试使用大小写语法,但无法执行。我猜我应该使用更新查询,而不是插入查询。

首先构建模式

**TABLE**

CREATE TABLE Examgrades 
    (
     Examid int auto_increment primary key, 
     Name varchar(20), 
     points int,
     Grade varchar(1)
    );

**INSERT RECORDS**

INSERT INTO Examgrades
(Name, points)
VALUES
('Email', 91),
('Twitter', 80);

**YOUR UPDATE**

update  Examgrades
set Grade = 'A'
where points >90;

您需要使用下面的更新来查找语法。您必须按照编辑器中的说明在花括号上编写代码

update [Tablename] set Grade = 'A' where points >90;

update Examgrades set Grade = 'A' where points >90;

可以使用计算列。一旦创建了没有Grade列的表,您就可以添加这样的计算列。至少在SQL Server上可以这样做,但您可能需要在其他DBMS的SQL上找到差异:

ALTER TABLE Exams
  ADD Grade AS
    CASE
      WHEN (Points > 90) THEN 'A'
      WHEN (Points > 70) THEN 'B'
      WHEN (Points > 50) THEN 'C'
      ELSE 'D'
    END
根据您的DBMS,您可能希望在插入和更新时使用触发器,但触发器的语法在很大程度上取决于您使用的系统


如果只计算了等级,而不需要存储等级,则可以使用视图,或者在查询表时直接创建它,而根本没有等级列。

尝试此演示代码以获得所需的结果这是对表的更新,它是用oracle sql编写的,您还可以编写函数并在更新等级时调用它:-

 create table examd (examid number,name varchar2(20),points number, grade varchar2(2))

 insert all 
 into examd(examid,name,points) values(330,'MILEY',80)
 into examd(examid,name,points) values(766,'CYRUS',70)
 into examd(examid,name,points) values(450,'GEORGE',30)
 into examd(examid,name,points) values(330,'WITCHER',99)
 into examd(examid,name,points) values(888,'WALKER',50)
 into examd(examid,name,points) values(233,'SHRIN',73)
 into examd(examid,name,points) values(330,'LILY',80)
 select * from dual;

 commit;

 select * from examd;

       update examd ex 
       set ex.grade=
                    (select case when ex1.points>=0 and ex1.points<=34 then 'F' 
                     else 
                     case when ex1.points>=35 and ex1.points<=49 then 'E' 
                     else 
                     case when ex1.points>=50 and ex1.points<=69 then 'D' 
                     else  
                     case when ex1.points>=70 and ex1.points<=80 then 'C' 
                     else 
                     case when ex1.points>=81 and ex1.points<=90 then 'B' 
                     else
                     case when ex1.points>=91 and ex1.points<=95 then 'A' 
                     else  
                     case when ex1.points>=96 and ex1.points<=100 then 'A+' 
                     end end end end end end end grade
                        from examd ex1 where ex1.examid=ex.examid and
                         ex1.points=ex.points 
                          and ex1.name=ex.name);

     commit;

您使用的是哪种数据库管理系统?博士后?Oracle?您是否正在尝试从select获取值?或者你想在更新或插入时重写值?JanR提出了一个很好的观点。您正在更新一个已经存在的表吗?我正在使用ASP.NET,并且我通过Visual Studio将我的网站与SQL数据库连接起来,所以我猜我正在使用Microsoft SQL Server。这不是问题所在。他要求自动执行这个操作。如果我做了一个触发器,每次动作或类似的动作都会触发,我还能用这些语句吗?如果每次需要时都会触发它们是的,您可以。可以为更新创建一个触发器,如果您愿意,也可以独立使用该函数。理想情况下,您不应该保存成绩,因为它是一个计算字段。最好使用表顶部带有Grade列的视图,您可以使用case语句计算该列。因此,您可以查询视图而不是表,这将显示您想要的数据。@MaheshMalpani完全同意,如果我用随机内容填充表,然后用UPDATE进行更改,也许我可以使用UPDATE语句?@WhatWhat什么是的,您可以使用UPDATE函数。但是,如果数据发生更改,则需要每次运行更新函数。