'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个参数条件,真实的结果,错误的结果。
所以逻辑是
1 2 3 4
| if report. type = 'p'
amount = amount
else
amount = -1*amount |
SQL
如果所有不是+ ve,你可以跳过abs()
我们来试试这个:
-
为什么加倍==? MySQL没有双==。 dev.mysql.com/doc/refman/5.7/en/
你也可以尝试一下