代码之家  ›  专栏  ›  技术社区  ›  coffeemonitor

mysql IF Else语句

  •  8
  • coffeemonitor  · 技术社区  · 14 年前

    不确定sql查询与if/else语句之间的距离。

    我有一个简单的SELECT语句:

    选择 amount , transtype transactions

    这个 转换型 列将是一个数字。

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

    所以,没什么复杂的。但由于报道方面的原因,这份名单往往会有所增长。这很好。

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

    例如,一些transtype数字是一个“损失”,而另一些是一个“收益”,也许其他的是“中性”。

    我只想用这3行来提取该列,而不想在我要将行放入的html表中使用php。

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

    4 回复  |  直到 14 年前
        1
  •  4
  •   David Murdoch    12 年前

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

    例子:

    SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
    
        2
  •  2
  •   Joe Mastey    14 年前

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

    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;
    
        3
  •  0
  •   deceze    14 年前

    这个 ELT 函数应该做到这一点:

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

    虽然不是很优雅,但在逻辑上,我会在视图逻辑中,而不是在数据库逻辑中这样做。

        4
  •  0
  •   Crozin    14 年前

    你应该用 ENUM type 在那个专栏里。它被限制为64个值,但是如果您需要更多的值,那么您应该创建一个新表并 JOIN 有疑问。