2012-07-12 87 views
0

更新1:这里是我的数据看起来像。SQL案例陈述

EmployeeId EmployeeName Active 
12312   bob    0 
23432   rob    1 
32312   dan    0 
43432   jan    1 
......................... 
......................... 

UPDATE:

我期待这样的事情后。

EmployeeId EmployeeName Active 
12312   bob    active 
23432   rob    pending 
......................... 
......................... 

我努力工作围绕以下SQL语句及其引发了我的错误,不知道这是做的正确的方式...

//错误: 关键字附近有语法错误'组'。

declare @currentStatus nvarchar(50) 

Select EmployeeId,EmployeeName,Active, 
     set @currentStatus = case when EmployeeId is not null and Active = 0 then "Active" else "Pending" end as Status 
from EmployeeTable 
+0

你是什么

SELECT EmployeeId, EmployeeName, Active, [Status] = CASE WHEN EmployeeId IS NOT NULL AND Active = 0 THEN 'Active' ELSE 'Pending' END FROM dbo.EmployeeTable; 

编辑与问题提供的样本数据更新INTE找到@currentStatus变量?这将有助于找出最佳解决方案。 – 2012-07-12 15:57:17

+0

为了清楚起见,CASE是一个表达式,它返回一个值,而不是一个STATEMENT(称它为一个声明,这导致很多人相信它可以用于控制流量,但它不能)。在任何情况下,您都无法在单个操作中合并数据检索和变量赋值,而不应该将字符串用双引号括起来。 – 2012-07-12 16:01:14

+0

更新我的问题,请看看。 – 2012-07-12 16:01:44

回答

0

为了让你在更新的问题显示的结果,这是只查询你需要的。我不知道为什么你认为你需要一个局部变量来保存每一行的表达式结果。

DECLARE @e TABLE(EmployeeID INT, EmployeeName VARCHAR(32), Active BIT); 

INSERT @e VALUES 
(12312,'bob',0), 
(23432,'rob',1), 
(32312,'dan',0), 
(43432,'jan',1); 

SELECT 
    EmployeeId, 
    EmployeeName, 
    Active, 
    [Status] = CASE WHEN EmployeeId IS NOT NULL AND Active = 0 
    THEN 'Active' 
    ELSE 'Pending' END 
FROM @e; 

结果:

EmployeeId EmployeeName Active Status 
12312  bob   0  Active 
23432  rob   1  Pending 
32312  dan   0  Active 
43432  jan   1  Pending 
+0

状态不是表格的列名称,它的变量设置为'pending'或'approved' – 2012-07-12 16:10:36

+0

@Abu您仍然没有解释为什么您认为您需要变量。你试过我的查询吗?它在结果中添加状态作为列(您的问题表示“Active”作为列标题,但我认为您的意思是“状态”)。 – 2012-07-12 16:20:58

+0

是的,我没有尝试exaclty,如上所述......这是我得到的错误«消息141,级别15,状态1,过程行83 将值赋予变量的SELECT语句不能与数据组合-retrieval operations.' – 2012-07-12 16:36:01

0
Select EmployeeId,EmployeeName,Active, 
     case when EmployeeId is not null and Active = 0 then 'Active' else 'Pending' end as Status 
from EmployeeTable 

如果你需要设置@CurrentStatus变量,那么你就需要做的分别:

Set @currentStatus = case when EmployeeId is not null and Active = 0 then 'Active' else 'Pending' end 
from EmployeeTable 
+0

嗯....我知道它可以单独完成,但这里的重点是,当我返回的数据,我希望与其他列不显示一起显示.... – 2012-07-12 15:59:26

+1

什么是将它分配给一个变量?你会在以后使用这个变量吗?如果是这样,你将不得不使用两个查询或将所有列分配给变量。 – 2012-07-12 16:02:00

+0

为什么运行这两个语句都有问题? – BonyT 2012-07-12 16:02:08

1

我想你应该试试这个:

SELECT EmployeeId, EmployeeName, CASE 
     WHEN (EmployeeId IS NOT NULL AND Active = 0) THEN 'Active' ELSE 'Pending' 
     END AS [Status] 
FROM EmployeeTable