用自定义字段替换字段[ORACLE]

时间:2017-02-05 19:10:15

标签: sql oracle case

Problem:我需要将一些错误转换为select语句。

Example:我有一张包含以下信息的表格:

 -----------------------
|ID   | NAME     | ERROR|
|-----------------------|
| 001 | example1 | err1 |
| 002 | example2 | err2 |
| 003 | example3 | err3 |
 -----------------------

每个错误都意味着:

err1: Login failed
err2: Failure of the database
err3: Hard drive full

我需要创建一个select语句,返回如下信息:

 -----------------------------------------
|ID   | NAME     |      ERROR             |
|-----------------------------------------|
| 001 | example1 | Login failed           |
| 002 | example2 | Failure of the database|
| 003 | example3 | Hard drive full        |
 -----------------------------------------

My intent:我尝试了以下内容:

SELECT *,
CASE
  WHEN error=err1  THEN 'Login failed'
  WHEN error=err2  THEN 'Failure of the database'
  WHEN error=err3  THEN 'Hard drive full'
END
FROM table;

2 个答案:

答案 0 :(得分:0)

SELECT table.*,
CASE
  WHEN error='err1'  THEN 'Login failed'
  WHEN error='err2'  THEN 'Failure of the database'
  WHEN error='err3'  THEN 'Hard drive full'
END as NEW_ERROR
FROM table

答案 1 :(得分:0)

解决此类问题的正确方法是不要在查询中硬编码每个错误代码的含义。相反,你应该有一个小表error_codes,有两列,一列用于错误代码,另一列用于描述。然后将您的基表连接到error_code列上的这个小表。硬编码会更快,因为它不需要连接,但维护起来会困难得多。特别是如果您需要在一个以上的查询中执行此操作。