根据另一列填充列

时间:2014-12-08 06:10:15

标签: sql

我试图为考试制作一张表格,如下所示:

ExamID | Name | Points | Grade

其中Points等于0到100之间的某个值。现在我想根据Points的值自动设置Grade的值。 IF> 90年级= A ......

执行此操作的SQL查询的基本语法是什么?无论如何,我之后会根据自己的需要调整它。

尝试使用CASE语法,但无法做到。我猜我应该使用UPDATE查询,而不是INSERT查询。

4 个答案:

答案 0 :(得分:1)

您可以使用计算列。在您的表格没有 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,您可能希望使用触发器进行插入和更新,但触发器的语法在很大程度上取决于您使用的系统。

如果仅计算Grade并且您实际上不需要存储View,则可以改为使用Grade,或者在查询表时直接创建它,而不是{{1}} 1}}列。

答案 1 :(得分:0)

你需要使用下面的UPDATE找到语法。你必须在编辑器上给出的大括号上编写代码

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

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

答案 2 :(得分:0)

试试这个演示代码以获得所需的结果这是对表的更新,它是用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;

答案 3 :(得分:-3)

首先构建架构

**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;

http://sqlfiddle.com/#!2/d3fd3f/1