2012-07-12 83 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