2011-08-02 18 views
1

我試圖在用戶可定義的範圍內分攤利率。來自用戶的輸入是一組關於桶的簡單指令,但我無法獲得SQL權限。MYSQL Bucketing問題與我的查詢

這裏就是我有

SELECT r.*,CASE 
WHEN rate_amt < 0.25 THEN (rate_amt + 0.5) as rate_amt 
WHEN (rate_amt >= 0.25 AND rate_amt < 0.5) THEN (rate_amt + 0.25) as rate_amt 
WHEN (rate_amt >=0.5 AND rate_amt < 0.75) THEN (rate_amt + 0.01) as rate_amt 
WHEN ELSE THEN (rate_amt) as rate_amt FROM (sc_module_rates r) 

運行該SQL產生錯誤

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as rate_amt 
WHEN (rate_amt >= 0.25 AND rate_amt < 0.5) THEN (0.25) as rate_amt 
W' at line 2 

表看起來是這樣的:

+-------------------+ 
| rate | rate_amt | 
--------------------- 
| fiji | 0.04  | 
| somoa | 0.76  | 
| japan | 0.51  | 
| china | 0.25  | 

我需要輸出基本上添加用戶可以確定這些比率的差值(一個數字,如查詢所示)

誰能告訴我我做錯了什麼? 我試着改變WHEN子句幾次,例如:

AND(rate_amt >=0.5 , rate_amt < 0.75) 
(rate_amt >=0.5 <0.75) 
(rate_amt BETWEEN 0.5 and 0.75) 

所有沒有成功,同樣的錯誤消息。

回答

1

此外,它可能沒有明確的,只有一個 「AS ResultColumn」 只在你的CASE/WHEN/END條款的最後

SELECT r.*, 
    rate_amt + CASE WHEN rate_amt < 0.25 THEN 0.5 
        WHEN rate_amt >= 0.25 AND rate_amt < 0.5 THEN 0.25 
        WHEN rate_amt >=0.5 AND rate_amt < 0.75 THEN 0.01 
        ELSE 0.00 
       END as rate_amt