1

ユーザーが定義できる範囲でレートをバケット化しようとしています。ユーザーからの入力はバケットに関する単純な一連の指示ですが、SQLを正しく取得できません。

これが私が持っているものです

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)

すべて成功せず、同じエラーメッセージが表示されます。

4

2 に答える 2

2

構文はCASE...WHEN...THEN...[ELSE]...ENDです。あなたはENDsを逃しています。

また、クエリの最後では、ELSE rate_amtではなく、単なるELSE THENです。

http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html

于 2011-08-02T11:05:25.487 に答える
1

さらに、明確ではなかったかもしれませんが、CASE / WHEN/END句の最後にのみ「ASResultColumn」が1つだけあります。

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
于 2011-08-02T11:15:03.697 に答える