select id,status
from request
上述查询的status列返回一些整数值。我需要把条件返回一些字符串值而不是整数值。选择查询中的条件
例如:如果状态1那么它应该返回“新”或者如果状态是2那么它应该返回“已批准”。
select id,status
from request
上述查询的status列返回一些整数值。我需要把条件返回一些字符串值而不是整数值。选择查询中的条件
例如:如果状态1那么它应该返回“新”或者如果状态是2那么它应该返回“已批准”。
我鄙视存储在表中的神秘的整数值,而不知道它们的含义。
我的解决方案需要多一点工作,但从长远来看,这是值得的。
开始通过创建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
列现在已经在数据库中有详细记录和管理。
您可以使用CASE
为
select id,
case status
when 1 then 'New'
when 2 then 'Approved'
end as statusText
from request
使用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
+1查找表建议... – 2012-08-06 14:24:45
select id, case when status = 1 then 'NEW' when status = 2 then 'Approved' else 'Undefined' end as status
from request
我不知道SQL Server的确切语法...
但在这里,你可以使用MySQL的(变体应该为你工作)的语法:
注意:这里假设只有两种选择 - 如果有更多选项,请使用case关键字。
select id, if(status = 1, "New", "Approved) from request
这不适用于SQL Server 2008/2008 R2版本....没有类似的结构可用。 SQL Server 2012现在有'IIF(...)'来做到这一点 – 2012-08-06 15:06:40
另一种需要考虑的方法是避免将标签逻辑放在每个条件中,这就是创建一个可以加入以获取字符串值的引用表,然后从请求表创建一个外键。这样,如果您需要添加状态或更改显示标签,则可以在一个位置执行此操作,而不必查找/更改每个查询。 – 2012-08-06 14:24:16