Sql 选择查询中的条件
上述查询的status列返回一些整数值。我需要设置一个条件来返回一些字符串值,而不是整数值 例如:如果状态为1,则应返回“新建”,如果状态为2,则应返回“已批准”。您可以使用 使用案例陈述:Sql 选择查询中的条件,sql,sql-server,sql-server-2008,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008,Sql Server 2008 R2,上述查询的status列返回一些整数值。我需要设置一个条件来返回一些字符串值,而不是整数值 例如:如果状态为1,则应返回“新建”,如果状态为2,则应返回“已批准”。您可以使用 使用案例陈述: select id, case status when 1 then 'New' when 2 then 'Approved' end as statusText from request 尽管我建议您有一个包含数字和状态值对应文本字符串
select id,
case status
when 1 then 'New'
when 2 then 'Approved'
end as statusText
from request
尽管我建议您有一个包含数字和状态值对应文本字符串的查找表
select
id,
case status
when 1 then 'New'
when 2 then 'Approved'
end as status
from
request
我不确定SQL Server的确切语法 但以下是mySQL可以使用的语法(一个变体应该适合您): 注意:这假设只有两种选择-如果有更多选择,请使用case关键字
select id, case when status = 1 then 'NEW' when status = 2 then 'Approved' else 'Undefined' end as status
from request
我鄙视存储在表中的神秘整数值,而不知道它们的含义 我的解决方案需要更多的前期工作,但从长远来看是值得的 首先创建一个新的StatusValues表:
select id, if(status = 1, "New", "Approved) from request
填充该表:
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);
以前神秘的
request.status
列现在在数据库中得到了很好的记录和管理。另一种方法是创建一个引用表,该表可以连接以获取字符串值,然后从请求表中创建一个外键。这样,如果需要添加状态或更改显示标签,可以在一个位置执行,而不必查找/更改每个查询。+1表示查找表建议…这在SQL Server 2008/2008 R2版本上不起作用。。。。没有类似的构造可用。SQL Server 2012现在有IIF(…)
来完成此任务
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;