如果标题具有误导性,我道歉。
我试图避免使用两个不同的查询。考虑到这一点,
我有以下示例查询
SELECT COUNT (*) COUNT,
SUM (AMT) AS DED_AMT,
SUM (SURCOST),
SUM (DEALSUM),
NVL (TO_CHAR (SUM (RETAIL)), 'N/A') AS RETAIL,
MNFCID
FROM (SELECT B.ID, B.CD, A.*
FROM OUTPUTS_A A JOIN OUTPUTS_B B ON A.ID = B.ID
WHERE B.ID = :ID AND B.CD = UPPER (:CD))
GROUP BY ID;
注意,我在查询中传递了两个绑定变量:ID,:CD。他们必须一起去,这就是我在那里使用AND运算符的原因。
有时,我只有MFCID而不是:ID和:CD。
这是我想到的逻辑。
我想修改查询,以便我能够将MFCID作为绑定变量传递。让我们说:mfcid是我传递的变量。
如果我有以下值:ID和:CD,我将传递这些值并传递任何内容:mfcid。 (在任何意义上我都没有通过任何东西。这个字段可以为空)
如果我只有:mfcid handy的值,我将传递该值并传递任何内容:ID和:CD。 (在任何意义上我都没有通过任何东西。这个字段可以为空)
无论哪种方式它都应该给我相同的结果。
我试过这样说:AND B.MNFCID = NVL(:MNFCID, B.MNFCID)
但它需要永远,因为如果不通过任何东西它总是如此。
答案 0 :(得分:0)
这样做你想要的吗?
SELECT COUNT(*) COUNT, SUM(AMT) AS DED_AMT, SUM(SURCOST),
SUM(DEALSUM), NVL(TO_CHAR(SUM(RETAIL)), 'N/A') AS RETAIL,
MNFCID
FROM OUTPUTS_A A JOIN
OUTPUTS_B B
ON A.ID = B.ID
WHERE (B.ID = :ID OR :ID IS NULL) AND
(B.CD = UPPER(:CD) OR :CD IS NULL)
GROUP BY B.ID;
如果这不起作用 - 它可能不起作用 - 您可能希望使用动态SQL,以便更容易使用适当的索引。