mysql IF Else Statement

时间:2010-11-14 23:03:10

标签: mysql if-statement

不确定if / else语句的sql查询可以用多远。

我有一个简单的SELECT语句:

  

SELECT amounttranstype FROM   transactions

transtype列将是一个数字。

例如,1 =促销,2 =退款,3 =错误,4 =取消,5 =其他等等....等等。

所以,没什么复杂的。但由于报告原因,该列表往往会增长。哪个没问题。

对于我正在处理的特定查询,有没有办法将该列提取为2个或3个指定数字或文本之一?

例如,某些transstype数字是'亏损',而其他的是'收益',其他人可能是'中立'。

我想只用那些3提取那个列,而不是在html表中使用php而是将行放入。

如果我的解释不明确,我道歉。吐出来很难。

4 个答案:

答案 0 :(得分:4)

MySQL CASE()函数用于固定数量的参数。如果列表变大,您应该使用第二个表并加入它们。

示例:

SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;

答案 1 :(得分:2)

尝试加入另一个包含事务类型的表。类似的东西:

TRANSACTION_TYPES
transtype | number
label     | varchar(32)

然后修改您的查询以包含联接:

select t.amount, t.transtype, l.label 
    from transactions.t 
    join transaction_types l on t.transtype = l.transtype;

答案 2 :(得分:0)

ELT函数可以解决这个问题:

SELECT ELT(`transtype`, 'loss', 'loss', 'gain', 'neutral', …) FROM …

虽然不是很优雅,但逻辑上我会在视图逻辑中执行此操作,而不是数据库逻辑。

答案 3 :(得分:0)

您可能应该使用ENUM type作为该列。它仅限于64个值,但是如果您需要更多值,那么您应该创建一个新表并在查询中JOIN