不确定if / else语句的sql查询可以用多远。
我有一个简单的SELECT语句:
SELECT
amount
,transtype
FROMtransactions
transtype
列将是一个数字。
例如,1 =促销,2 =退款,3 =错误,4 =取消,5 =其他等等....等等。
所以,没什么复杂的。但由于报告原因,该列表往往会增长。哪个没问题。
对于我正在处理的特定查询,有没有办法将该列提取为2个或3个指定数字或文本之一?
例如,某些transstype数字是'亏损',而其他的是'收益',其他人可能是'中立'。
我想只用那些3提取那个列,而不是在html表中使用php而是将行放入。
如果我的解释不明确,我道歉。吐出来很难。
答案 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
。