如何在Oracle中格式化查询结果?

时间:2013-09-09 15:58:05

标签: sql oracle select

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

[抱歉,如果它没有意义 - 这是一个家庭作业问题]

5 个答案:

答案 0 :(得分: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'

答案 1 :(得分:2)

有可能。这样的事情应该有效:

select case JOB when 'CLERK' then 'NEW CLERK' else JOB end as JOB from your_table

答案 2 :(得分:2)

您可以使用案例陈述

SELECT  empno,
                ename,
                CASE WHEN job = 'CLERK' THEN 'NEW CLERK' ELSE job END job,
                mgr,
                hiredate,
                sal,
                comm,
                deptno
      FROM  emp
     WHERE  job = 'CLERK'

答案 3 :(得分:1)

您可以尝试:

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

Documentation

答案 4 :(得分:1)

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

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

您也可以使用decode代替CASE

SELECT decode(job,'CLERK','NEW CLERK',job)
  FROM EMP