2016-07-28 66 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

那我该如何区分我的小列和大列呢? –