2016-07-28 38 views
1

我想在mysql數據庫上使用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 

錯誤: ......對於使用近「小,CASE正確的語法(金額> 0)

我想,像這樣

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

我的輸出一直試着沒有運氣。請幫助。

+0

那麼你的預期產出結構看喜歡?有多少列? – 1000111

+0

@ 1000111剛剛將我的預期輸出添加到問題 –

+0

您沒有用'END'終止'CASE'語句,這會導致語法無效。不僅如此,'CASE WHEN THEN END'是使用CASE的基本示例。請注意,當「金額」小於或大於0時,由於這一點,您沒有做任何事情。推薦閱讀:[控制流語句](http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html) –

回答

1

這:

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 

理解CASE WHEN

實施例#1:

假設,

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

讓我們使用CASE WHEN表達式轉換此if-else if鏈在MySQL:

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:

現在,我們要在以下三個轉變,如果在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; 

輸出:

現在輸出有三列:

negativeOutput  zeroOutput  positiveOutput 
            N is positive 
+0

非常感謝。像魔術一樣工作。謝謝你的解釋,它有幫助。 –

-2

只能別名整個表達式,表達式的不單獨組分:

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

你爲什麼不用'END來終止'CASE'語句'? –

+0

因爲這只是一個快速/骯髒的例子,顯然不會在OP的情況下工作。 –

+0

那我該如何區分我的小列和大列呢? –