2012-08-06 251 views
0
select id,status 
from request 

上述查询的status列返回一些整数值。我需要把条件返回一些字符串值而不是整数值。选择查询中的条件

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

+0

另一种需要考虑的方法是避免将标签逻辑放在每个条件中,这就是创建一个可以加入以获取字符串值的引用表,然后从请求表创建一个外键。这样,如果您需要添加状态或更改显示标签,则可以在一个位置执行此操作,而不必查找/更改每个查询。 – 2012-08-06 14:24:16

回答

1

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

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

开始通过创建StatusValues的新表:

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

填充该表:

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

创建一个从申请表的外键关系到这一个:

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列现在已经在数据库中有详细记录和管理。

3

您可以使用CASE

select id, 
     case status 
      when 1 then 'New' 
      when 2 then 'Approved' 
     end as statusText 
from request 
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 
+0

+1查找表建议... – 2012-08-06 14:24:45

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

我不知道SQL Server的确切语法...

但在这里,你可以使用MySQL的(变体应该为你工作)的语法:

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

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

这不适用于SQL Server 2008/2008 R2版本....没有类似的结构可用。 SQL Server 2012现在有'IIF(...)'来做到这一点 – 2012-08-06 15:06:40