选择查询内的条件

时间:2012-08-06 14:20:14

标签: sql sql-server sql-server-2008 sql-server-2008-r2

select id,status
from request

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

例如:如果状态1然后它应该返回“新”或状态是2那么它应该返回“已批准”。

5 个答案:

答案 0 :(得分:4)

使用案例陈述:

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

答案 1 :(得分:3)

您可以{/ 3}}使用

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

答案 2 :(得分:1)

select id, case when status = 1 then 'NEW' when status = 2 then 'Approved' else 'Undefined' end as status
from request

答案 3 :(得分: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列现已在数据库中进行了详细记录和管理。

答案 4 :(得分:0)

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

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

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

select id, if(status = 1, "New", "Approved) from request