Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择查询中的条件_Sql_Sql Server_Sql Server 2008_Sql Server 2008 R2 - Fatal编程技术网

Sql 选择查询中的条件

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 尽管我建议您有一个包含数字和状态值对应文本字符串

上述查询的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 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;