0

我有一个名为 EMP 的表,其中有一列名为 JOB。现在,JOB 列有各种条目,如 CLERK、SALESMAN、MANAGER 等。我想获取 JOB = 'CLERK' 的所有行(&columns),而不是显示 'CLERK' 我想显示 'NEW CLERK'。我不应该更改表中的值,而是在查询时显示不同的值。这可能吗?

[对不起,如果没有意义 - 这是一个家庭作业问题]

4

5 回答 5

2

一种方法是使用 CASE 表达式,例如:

SELECT CASE WHEN t.job = 'CLERK' THEN 'NEW CLERK' ELSE t.job END AS job
     , t.other_col
  FROM emp t

这将返回JOB列中的值,但将出现的 替换为'CLERK'的字面值除外'NEW CLERK'

如果您有几个不同的替换要做,CASE 表达式的搜索形式会很方便:

SELECT CASE t.job 
       WHEN 'CLERK' THEN 'NEW CLERK'
       WHEN 'SALESMAN' THEN 'GOOD SALESMAN'
       ELSE t.job
       END AS job
     , t.other_col
  FROM emp t

“搜索”形式只是一种较短的写作方式:

SELECT CASE
       WHEN t.job = 'CLERK' THEN 'NEW CLERK'
       WHEN t.job = 'SALESMAN' THEN 'GOOD SALESMAN'
       ELSE t.job
       END AS job
     , t.other_col
  FROM emp t

如果您只返回 JOB 列中包含“CLERK”的行,那么您可以简单地在语句中返回一个文字:

SELECT 'NEW CLERK' AS job 
     , t.other_col
  FROM emp t
 WHERE t.job = 'CLERK'

- 或者 -

SELECT 'NEW '||t.job AS job 
     , t.other_col
  FROM emp t
 WHERE t.job = 'CLERK'
于 2013-09-09T16:00:42.240 回答
2

有可能的。像这样的东西应该工作:

select case JOB when 'CLERK' then 'NEW CLERK' else JOB end as JOB from your_table
于 2013-09-09T16:01:41.470 回答
2

您可以使用 case 语句

SELECT  empno,
                ename,
                CASE WHEN job = 'CLERK' THEN 'NEW CLERK' ELSE job END job,
                mgr,
                hiredate,
                sal,
                comm,
                deptno
      FROM  emp
     WHERE  job = 'CLERK'
于 2013-09-09T16:04:29.540 回答
1

你可以试试:

SELECT *, 
    CASE WHEN JOB = 'CLERK'
         THEN 'NEW CLERK'
    END
FROM EMP

文档

于 2013-09-09T16:01:19.327 回答
1

如果您已经按作业过滤,则可以将新值直接显示为常量。

SELECT 'NEW CLERK' as job
  FROM EMP 
 WHERE job='CLERK'

您也可以使用decode代替CASE

SELECT decode(job,'CLERK','NEW CLERK',job)
  FROM EMP 
于 2013-09-09T16:09:21.437 回答