0
select id,status
from request

上述查询的状态列返回一些整数值。我需要设置一个条件来返回一些字符串值而不是整数值。

例如:如果状态为 1,那么它应该返回“New”,或者如果状态是 2,那么它应该返回“Approved”。

4

5 回答 5

4

使用 case 语句:

select 
    id, 
    case status
        when 1 then 'New' 
        when 2 then 'Approved' 
    end as status 
from 
    request 

虽然我建议您有一个查找表,其中包含状态值的数字和相应的文本字符串。

select 
    req.id, 
    stat.value as status
from 
    request as req inner join status as stat 
        on req.status = stat.id
于 2012-08-06T14:22:53.730 回答
3

你可以使用CASE

select id,
       case status
          when 1 then 'New'
          when 2 then 'Approved'
       end as statusText
from request
于 2012-08-06T14:22:02.440 回答
1
select id, case when status = 1 then 'NEW' when status = 2 then 'Approved' else 'Undefined' end as status
from request
于 2012-08-06T14:23:00.343 回答
1

我鄙视存储在表中的神秘整数值,不知道它们的含义。

我的解决方案需要做更多的工作,但从长远来看这是值得的。

首先创建一个新的 StatusValues 表:

StatusValues
------------
Status INT PRIMARY KEY
StatusValue VARCHAR(20)

填充该表:

Status    StatusValue
------    -----------
1         New
2         Approved

创建从 Request 表到该表的外键关系:

ALTER TABLE request
    ADD CONSTRAINT FK_Request_StatusValues FOREIGN KEY (status)
    REFERENCES StatusValues (status);

最后,编写查询:

SELECT r.id, sv.StatusValue
    FROM request r
        INNER JOIN StatusValues sv
            ON r.status = sv.status;

以前神秘的request.status列现在在数据库中得到了很好的记录和管理。

于 2012-08-06T14:29:19.007 回答
0

我不确定 SQL Server 的确切语法...

但这里是您可以用于 mySQL 的语法(一个变体应该适合您):

注意:这假设只有两个选择 - 如果有更多选择,请使用 case 关键字。

select id, if(status = 1, "New", "Approved) from request
于 2012-08-06T14:25:11.470 回答