2010-11-14 315 views
7

不知道sql语句可以在if/else语句中使用多远。mysql如果其他语句

我有一个简单的SELECT语句:

选择amounttranstype FROM transactions

transtype列将是一个数字。

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

所以,没有什么复杂的。但由于报告的原因,名单往往会增加。这很好。

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

例如,一些trannsype数字是“损失”,而另一些是“收益”,也可能是“中性”。

我想只提取那3列,而不使用PHP内部的HTML表格我扔行。

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

+0

您想将您的transtype值分类为损失,收益或中性? – 2010-11-14 23:07:37

回答

3

使用MySQL CASE()功能。如果列表变大,则应使用第二个表并加入它们。

例子:

SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; 
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; 
+0

我正试图远离额外的桌子。我预计这种转型增长超过10个数字。但你说得对,这是一个快速解决方案。 – coffeemonitor 2010-11-14 23:12:25

+0

它还将保留数据库的关系完整性,以便您可以理解它,而无需通过特定查询为您“解释”您的幻数。 – 2010-11-15 15:50:16

0

ELT功能应该做的伎俩:

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

不是很优雅,虽然,逻辑上我会做这样的观点的逻辑,而不是数据库逻辑。

0

您应该使用该列的ENUM type。它仅限于64个值,但如果您需要更多,则应该创建一个新表并在查询中创建一个新表。