如何在子查询之外使用having子句?

时间:2019-09-07 13:30:27

标签: mysql rdbms ireport

列表项

我在下面附加了查询,我需要根据以下条件过滤数据。仅当从各个表传递参数时,才会显示输出。

 SELECT 
    (SELECT 'Static Field') AS account_type,
    (SELECT 
            COALESCE(SUM(ln.amount), 0)
        FROM
             ln
        WHERE
                AND ln.brch_id = $P{PARA_ID}
                AND ln.date < $P{PARAM_FROM_DATE}
                AND $P{PARA_Account_Type} = 'Static Field') AS debit_amount,
    (SELECT 
            COALESCE(SUM(pd.paid_amount), 0)
        FROM
         pd,
             ln
        WHERE
            pd.loan_id = ln.id AND ln.brch_id = $P{PARA_ID}
                AND pd.paid_date < $P{PARAM_FROM_DATE}
                AND $P{PARA_Account_Type} = 'Static Field') AS credit_amount
    having 
    account_type = 'Static Field'

输出应为: 我希望只有在传递了相应参数的情况下,才根据上述不同条件得出的值之和,如果未传递相应参数,则不会显示该行

1 个答案:

答案 0 :(得分:0)

您的查询很有趣,因为它是一个没有FROM的SELECT,这就是为什么您不能使用WHERE或HAVING进行过滤的原因。

当您的查询是没有任何FROM的SELECT时,总是返回准确的1条记录。

一种快速的解决方案是,向查询中添加一个简单的FROM行,如下所示,该行具有1行,然后使您能够使用HAVING进行过滤。

FROM  ( select 1 as justarow ) r
HAVING account_type = 'Static Field'