'IF' in 'SELECT' statement - choose output value based on column values
如果report.type='P',我需要amount amount,如果report.type='N',我需要-amount。 如何将其添加到上述查询中?
请参阅http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html。
此外,您可以在条件为null时进行处理。 在空金额的情况下:
部分IFNULL(amount,0)表示当金额不为空时返回金额,否则返回0。
		
		
- 
我想知道在这里使用IFNULL代替COALESCE是否有任何优势?
- 
从mysql源码,我注意到coalesce的2个定义,一个带有2个参数,另一个带有参数列表,但是ifnull用2个参数调用coalesce sql/item_cmpfunc.h 722:  Item_func_ifnull(Item *a, Item *b) :Item_func_coalesce(a,b) {}
- 
@FelipeAlcacibar,这个解决方案的性能如何?
- 
非常有用:IFNULL(数量,0)
- 
如果报告类型不同于"N"和"P",答案是不正确的,请参阅BadHorsie在更好的"案例陈述"解决方案中的评论。
- 
@Trygve问题是针对2个条件,并寻找IF语句,出了什么问题?
- 
@Felipe,答案不一定是100%正确,可能有其他报告类型而不是N和P.在您的情况下,这可能会导致错误,如果报告类型(例如)选择-amount为'E'。问题没有提到是否有其他报告类型,所以我删除了我的downvote。我只是喜欢在这些情况下进行防御性编程,所以要与其他读者对决。
 
	 
使用case语句:
		
		
- 
@Evan:是的。我使用它们是为了清晰。并不是说无论如何它会影响任何东西
- 
这也适用于SQL Server(更通用的解决方案)
- 
我更喜欢ANSI标准语法而不是特定数据库的自定义语法。
- 
这是最佳解决方案,因为如果report.type有其他值,或者以后引入新的report.type,则接受的答案解决方案不一定合适。这是说if report.type = 'P' use amount, otherwise use -amount for anything else。如果它不是'P',它将不会考虑类型。
 
	 
最简单的方法是使用IF()。 是的Mysql允许你做条件逻辑。 IF函数需要3个参数条件,真实的结果,错误的结果。
所以逻辑是
| 12
 3
 4
 
 | if report.type = 'p' 
    amount =  amount 
else 
    amount = -1* amount | 
SQL
如果所有不是+ ve,你可以跳过abs()
 
我们来试试这个:
		
		
- 
为什么加倍==? MySQL没有双==。 dev.mysql.com/doc/refman/5.7/en/
 
	 
你也可以尝试一下