繁体   English   中英

如何根据另一列的值将字符串添加到新列中? (甲骨文 SQL 开发人员)

[英]How to add a string into a new column based on the value of another column? (Oracle SQL Developer)

我需要根据另一行更新新创建的行的值。 在这种情况下,我需要创建一个名为 honor_level 的新列,并需要根据学生的 gpa 用不同的字符串填充它。 它必须使用SELECTUNION语句来完成,但我不确定我是否应该使用ALTER TABLE命令来创建新列,或者是否可以在单独的 SELECT 语句中创建。 下面的代码大部分是正确的,我只需要找出一种方法,根据学生的 GPA 将正确的字符串分配给新创建的列。

SELECT first_name, last_name, email, cGPA AS "1st Class Honor"
    FROM Student
    WHERE cGPA > 3.9;
UNION
SELECT first_name, last_name, email, cGPA AS "2nd Class Honor"
    FROM Student
    WHERE cGPA >= 3.7 AND cGPA < 3.9;
UNION
SELECT first_name, last_name, email, cGPA AS "3rd Class Honor"
    FROM Student
    WHERE cGPA >= 3.5 AND cGPA < 3.7;
UNION  
SELECT first_name, last_name, email, cGPA AS "On track to graduate"
    FROM Student
    WHERE cGPA < 3.5 AND cGPA > 2.0;

如果荣誉级别总是从 cgpa 派生,您还可以查看使用派生列:

alter table student add honor_level varchar2(100) generated always as (       CASE
          WHEN cgpa > 3.9
          THEN
             '1st Class Honor'
          WHEN     cgpa >= 3.7
               AND cgpa < 3.9
          THEN
             '2nd Class Honor'
          WHEN     cgpa >= 3.5
               AND cgpa < 3.7
          THEN
             '3rd Class Honor'
          WHEN     cgpa < 3.5
               AND cgpa > 2
          THEN
             'On track to graduate'
       END) virtual;

无需更新 - 值始终是派生的,无法插入/更新列。

我不确定是否应该使用 ALTER TABLE 命令创建新列,或者是否可以在单独的 SELECT 语句中创建

这取决于您真正需要的结果。

如果你只想得到 select 这些值,那么select就是:

SELECT first_name,
       last_name,
       email,
       cgpa,
       CASE
          WHEN cgpa > 3.9
          THEN
             '1st Class Honor'
          WHEN     cgpa >= 3.7
               AND cgpa < 3.9
          THEN
             '2nd Class Honor'
          WHEN     cgpa >= 3.5
               AND cgpa < 3.7
          THEN
             '3rd Class Honor'
          WHEN     cgpa < 3.5
               AND cgpa > 2
          THEN
             'On track to graduate'
       END honor_level
  FROM student;

如果要将值存储到新列中,则必须先添加它(如果它不存在),然后更新其内容:

ALTER TABLE student
   ADD honor_level VARCHAR2 (30);

UPDATE student
   SET honor_level =
          CASE
             WHEN cgpa > 3.9
             THEN
                '1st Class Honor'
             WHEN     cgpa >= 3.7
                  AND cgpa < 3.9
             THEN
                '2nd Class Honor'
             WHEN     cgpa >= 3.5
                  AND cgpa < 3.7
             THEN
                '3rd Class Honor'
             WHEN     cgpa < 3.5
                  AND cgpa > 2
             THEN
                'On track to graduate'
          END;

或者,您可以创建一个视图,这样您就不必重新编写相同的代码(也不会在cgpa更改时更新honor_level ):

CREATE OR REPLACE VIEW v_student
AS
   SELECT first_name,
          last_name,
          email,
          cgpa,
          CASE
             WHEN cgpa > 3.9
             THEN
                '1st Class Honor'
             WHEN     cgpa >= 3.7
                  AND cgpa < 3.9
             THEN
                '2nd Class Honor'
             WHEN     cgpa >= 3.5
                  AND cgpa < 3.7
             THEN
                '3rd Class Honor'
             WHEN     cgpa < 3.5
                  AND cgpa > 2
             THEN
                'On track to graduate'
          END honor_level
     FROM student;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM