【问题标题】:Using If statement in On statement在 On 语句中使用 If 语句
【发布时间】:2016-04-10 17:22:07
【问题描述】:

我正在按客户/帐号提供交易摘要。交易有两个可能的组件,硬件或软件 我希望用户获得包含帐户总数的演示文稿,或者单独显示硬件和软件总数。

目前提供给用户的唯一选择是单独获取它们。为此,我有一个带有连接的子查询,其 on 语句当前读取

on tb3.account_nbr=tb4.account_nbr and tb3.trans_type=tb4.trans_type

消除语句的 trans_type 评估会返回帐户上所有交易的总数。

我在表单上添加了一个复选框,表明他们偏好分别获取总数或两个组件。结果变量 (@get_trans) 的值是“1”,表示按交易类型显示为单独的总数,或者是“0”,表示将所有交易类型相加并显示为单一总数。

我可以将上面的内容更改为解决方案的 if 语句,但它不起作用

on tb3.account_nbr=tb4.account_nbr and if(@get_trans=1,tb3.trans_type=tb4.trans_type,"")

任何帮助将不胜感激。 谢谢, 吉姆

【问题讨论】:

    标签: mysql sql join


    【解决方案1】:

    问题可能是else 子句。在这种情况下,空字符串将评估为0 - 并被视为错误。这会导致整个on 条件为假。

    但是,您可以在没有if 的情况下编写逻辑:

    on tb3.account_nbr = tb4.account_nbr and 
       (@get_trans <> 1 or tb3.trans_type = tb4.trans_type)
    

    注意:此版本假定 @get_trans 不采用 NULL 值。这很容易处理:

    on tb3.account_nbr = tb4.account_nbr and 
       (@get_trans <> 1 or @get_trans is null or tb3.trans_type = tb4.trans_type)
    

    【讨论】:

    • 啊,好点子。你的解决方案更优雅,我从来没有想过,但从这一点开始。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多