2016-07-26 53 views
1

我需要使用類似「switch」的內容來定義結果中的新列。在SQL Server 2014中切換SELECT

例子:

----------------------- 
user_id | nick | role | 
----------------------- 
    1 | dupa | A | 
    2 | geno | U | 
    3 | mato | E | 
----------------------- 

由於A的意思是「管理員」,U表示「默認用戶」和E的意思是「編輯」,我需要把新列結果和獲得角色的全名。這樣的事情:

---------------------------------- 
user_id | nick | role | fullname | 
---------------------------------- 
    1 | dupa | A | admin | 
    2 | geno | U | user | 
    3 | mato | E | editor | 
---------------------------------- 

所以看來我需要使用開關,因爲有超過2個角色。如果role ='A',那麼fullname將是admin,依此類推。我怎樣才能做到這一點?

我有這樣的事情現在:

SELECT 
    user_ud, 
    nick, 
    role, 
    CASE 
     WHEN role = 'A' THEN fullname = 'Admin' 
     WHEN role = 'E' THEN fullname = 'Editor' 
     WHEN role = 'U' THEN fullname = 'User' 
     ELSE fullname = NULL 
    END 
FROM 
    [tablename] ... 

但它不工作:(

+2

你有足夠的答案,以備將來的問題是:如果事情不工作,解釋什麼是行不通的。它會拋出一個錯誤嗎?如果是這樣,那麼錯誤是什麼。輸出是否意外?如果是這樣,你期望什麼,以及你實際得到了什麼。 – HoneyBadger

回答

1
SELECT 
    user_ud, 
    nick, 
    role, 
    (
     CASE 
      WHEN role = 'A' THEN 'Admin' 
      WHEN role = 'E' THEN 'Editor' 
      WHEN role = 'U' THEN 'User' 
      ELSE NULL 
     END 
    ) AS fullname 
FROM [tablename] 
3

CASE表達你不能指定列的值只返回值。你想要分配一個別名的表達式:

SELECT 
    user_ud, 
    nick, 
    role, 
    CASE 
     WHEN role = 'A' THEN 'Admin' 
     WHEN role = 'E' THEN 'Editor' 
     WHEN role = 'U' THEN 'User' 
     ELSE NULL 
    END as fullname 
FROM [tablename] ... 
1

試試這個:

SELECT 
    user_ud, 
    nick, 
    role, 
CASE role 
    WHEN 'A' THEN 'Admin' 
    WHEN 'E' THEN 'Editor' 
    WHEN 'U' THEN 'User' 
    ELSE NULL 
END as fullname 
FROM [tablename] 
0

錯誤的語法和NULL是默認的,可以省略。

fullname = CASE 
    WHEN role = 'A' THEN 'Admin' 
    WHEN role = 'E' THEN 'Editor' 
    WHEN role = 'U' THEN 'User' 
END 

當所有謂詞是=您可以使用替代語法

fullname = CASE role 
    WHEN 'A' THEN 'Admin' 
    WHEN 'E' THEN 'Editor' 
    WHEN 'U' THEN 'User' 
END