2014-11-14 148 views
0

我一直在尋找很多,在例子中一切看起來很好,但實際上並沒有。 我想根據金額計算薪水增加額。出現缺少關鍵字錯誤。SQL CASE當大於

SELECT o.operator_name, 
     o.salary, 
(CASE o.salary 
WHEN o.salary < 500 THEN o.salary * 1.35 
WHEN o.salary >= 500 AND o.salary < 1000 THEN o.salary * 1.15 
WHEN o.salary >= 1000 AND o.salary < 1500 THEN o.salary * 1.05 
END) AS "Increase" 
FROM operators o; 

我試着用IF ELSIF,我得到了「從不是預期的地方」。

+0

將'CASE o.salary WHEN ...'改爲'CASE WHEN ...' – Siyual 2014-11-14 20:53:29

+0

您不需要'> ='測試。測試是按順序執行的,所以如果它是'<500',第一個'WHEN'將會匹配,並且它將永遠不會到達第二個。 – Barmar 2014-11-14 20:53:58

回答

1

看起來像你想ELSE:

SELECT o.operator_name, 
     o.salary, 
(CASE 
WHEN o.salary < 500 THEN o.salary * 1.35 
WHEN o.salary >= 500 AND o.salary < 1000 THEN o.salary * 1.15 
WHEN o.salary >= 1000 AND o.salary < 1500 THEN o.salary * 1.05 
ELSE o.salary 
END) AS "Increase" 
FROM operators o; 
3

您已經的CASE混合兩種格式,請嘗試:

SELECT o.operator_name, 
     o.salary, 
     CASE WHEN o.salary < 500 THEN o.salary * 1.35 
      WHEN o.salary >= 500 AND o.salary < 1000 THEN o.salary * 1.15 
      WHEN o.salary >= 1000 AND o.salary < 1500 THEN o.salary * 1.05 
      ELSE o.salary 
     END AS "Increase" 
FROM operators o; 

這種格式允許多個/不同的領域中使用,以及比較運營商。如果您想要返回薪水值1500以上的東西,您可能還需要END之前的ELSE

另外值得一提的是,CASE退出在第一次見面的標準,所以你可以使用:

SELECT o.operator_name, 
     o.salary, 
     CASE WHEN o.salary < 500 THEN o.salary * 1.35 
      WHEN o.salary < 1000 THEN o.salary * 1.15 
      WHEN o.salary < 1500 THEN o.salary * 1.05 
      ELSE o.salary 
     END AS "Increase" 
FROM operators o; 

CASE其他格式不會爲你的榜樣工作,但這裏有一個簡單的例子來說明使用:

SELECT CASE col1 
      WHEN 'cat' THEN 1 
      WHEN 'dog' THEN 2 
     END 
FROM table1 

這相當於:

SELECT CASE WHEN col1 = 'cat' THEN 1 
      WHEN col1 = 'dog' THEN 2 
     END 
FROM table1 
+1

你真的可以把比較運算符放在第二種形式嗎?我認爲這只是爲了平等測試,例如「那麼500當......」 – Barmar 2014-11-14 20:56:34

+0

@Barmar甚至沒有想過這件事,相當肯定你是對的。 – 2014-11-14 20:58:31

+0

謝謝,問題是'CASE'後的'o.salary'。 – 2014-11-14 21:07:07

0
SELECT o.operator_name, 
     o.salary, 
     CASE 
     WHEN o.salary < 500 THEN o.salary * 1.35 
     WHEN o.salary >= 500 
       AND o.salary < 1000 THEN o.salary * 1.15 
     WHEN o.salary >= 1000 
       AND o.salary < 1500 THEN o.salary * 1.05 
     END AS "Increase" 
FROM operators o; 

應該訣竅!

0

它看起來像缺少默認情況。你必須用'ELSE default_value'來完成你的案例。所以:

CASE foo 
    WHEN bar THEN 1 
    WHEN baz THEN 2 
    ELSE 0 
END