2016-07-26 9 views
1

Ich brauche etwas wie "Schalter", um die neue Spalte im Ergebnis zu definieren.Wechseln Sie in SELECT in SQL Server 2014

Beispiel:

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

Da A bedeutet „Administrator“, U bedeutet „Standardbenutzer“ und E bedeutet „Editor“, ich brauche neue Spalte setzen die Fullname der Rolle zu führen und zu erhalten. Etwas wie folgt aus:

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

So scheint es, ich brauche Schalter zu verwenden, weil es mehr als zwei Rollen sind. Wenn role = 'A', dann ist fullname admin und so weiter. Wie kann ich das machen?

Ich habe so etwas wie dies für jetzt:

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] ... 

Aber es funktioniert nicht :(

+2

Sie viele Antworten bekommen, für zukünftige Fragen aber: wenn etwas nicht funktioniert, erklären, was nicht funktioniert. Gibt es einen Fehler? Wenn ja, was ist der Fehler? Ist die Ausgabe unerwartet? Wenn ja, was erwartest du und was bekommst du eigentlich? – HoneyBadger

Antwort

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

Sie können keine Spaltenwerte in einem CASE Ausdruck zuweisen einfach die Werte zurückgeben. Sie wollen und einen Aliasnamen zum Ausdruck zuweisen:

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
diese

Versuchen:

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

Falsche Syntax und NULL ist Standard, kann weggelassen werden.

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

Wenn alle Prädikate sind = können Sie alternative Syntax verwenden

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