2016-07-28 16 views
1

mysql DBでselect case文を使用しようとしています。Mysql SELECT CASE WHENの使用方法

SELECT 
t.name, t.colour, 
CASE WHEN (Amount < 0) AS small, CASE WHEN (Amount > 0) AS large FROM t 

エラー: ......近い「AS小さな、CASE(量> 0)

を使用する権利構文については、私はそう

Name  Colour  Small  Large 
item1  red  -35 
item2  blue     48 
etc. 

のように私の出力をしたいです運がないとしようとしていた。助けてください。

+0

何あなたの期待される出力構造の外観を行います好き?いくつの列がありますか? – 1000111

+0

@ 1000111は私の予想される出力を質問に追加しました –

+0

あなたは 'CASE'ステートメントを' END'で終了していないので、構文が無効になります。それだけでなく、 'CASE WHEN THEN END'が' CASE'を使う基本的な例です。 'Amount'が0より小さいか大きい場合、その結果として何もしていないことに注意してください。見直しを推奨:[制御フローステートメント](http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html) –

答えて

1

ここにそれがある:CASE WHENを理解

SELECT 
t.name, 
t.colour, 
CASE WHEN (t.Amount < 0) THEN t.Amount END AS small, 
CASE WHEN (t.Amount > 0) THEN t.Amount END AS large 
FROM t 

例#1:

と仮定、

IF n < 0 THEN 
    'N is negative' 
else if n == 0 THEN 'N is Zero' 
else 'N is positive' 

はのはCASE WHEN表現を使用してMySQLにこのif-else ifチェーンを変換してみましょう:

SET @n := -9; 
SELECT 
CASE WHEN @n <0 THEN 'N is Negative' 
    WHEN @n =0 THEN 'N is 0' 
    ELSE 'N is positive' END AS output; 

出力:

output 
N is Negative 

例#2:

は、今、私たちは、次の3つを変換したい場合はMySQLでのステートメント

IF n <0 THEN 'N is Negative' 
IF n == 0 THEN 'N is Zero' 
IF n > 0 THEN 'N is Positive' 

SET @n := 5; 
SELECT 
    CASE WHEN @n <0 THEN 'N is Negative' END AS negativeOutput, 
    CASE WHEN @n =0 THEN 'N is 0' END AS zeroOutput, 
    CASE WHEN @n > 0 THEN 'N is positive' END AS positiveOutput; 

出力:

は今、出力は3つの列があります。

negativeOutput  zeroOutput  positiveOutput 
            N is positive 
+0

ありがとうございました。マジックのように動作します。説明してくれてありがとう、それは助けになる。 –

-2

あなたが唯一の全体の表現ではなく、表現の個々のコンポーネントのエイリアスすることができます

SELECT ... (CASE WHEN 'foo'='bar' THEN 'baz' ELSE 'qux') AS foo 
      ^--------------------------------------------^ 
+0

なぜ 'CASE'ステートメントを' END '? –

+0

これは明らかにOPのケースではうまくいきません。 –

+0

どうすればSmallとLargeの列を分けることができますか? –