Я прошу прощения, если название вводит в заблуждение.
Я стараюсь избегать использования двух разных запросов.Имея это в виду,
У меня есть следующий пример запроса
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;
, который возвращает результат, который вы видите на первом скриншоте. ![enter image description here](https://i.stack.imgur.com/VIyrV.png)
Обратите внимание, я передаю две переменные связывания в запросе: ID,: CD.Они должны идти вместе, и поэтому я использую оператор AND там.
Иногда у меня есть только MFCID, а не: ID и: CD.
Это логика, которую я думаюоколо.
Я хотел бы изменить запрос таким образом, чтобы я мог передавать MFCID в качестве переменной связывания.Допустим, mfcid - это переменная, которую я передаю.
Если у меня есть значения для: ID и: CD, удобно, я передам эти значения и ничего не передам для: mfcid.(Ничего в том смысле, что я ничего не передам. Это поле не может быть нулевым)
Если у меня есть только значение для: mfcid handy, я передам это значение иничего не передать для: ID и: CD.(Ничего в том смысле, что я ничего не пропущу. Это поле не может быть нулевым)
В любом случае оно должно вернуть мне тот же результат.
Iпытался выразить это так: AND B.MNFCID = NVL(:MNFCID, B.MNFCID)
, но это занимает вечность, потому что это всегда так, если ничего не пропустить.