Мне нравится разбивать подобные запросы на более мелкие части, исправлять части, а затем добавлять другие части, исправляя вещи по крупицам.
Я начну с бита FROM:
select *
FROM gcibjdnf
LEFT JOIN apcconc
ON TO_CHAR(apcconc.cd_sap_dealer) = gcibjdnf.dealer_sap
LEFT JOIN gcccond
ON gcccond.id_cond = gcibjdnf.id_cond
LEFT JOIN dnccontrfundo
ON dnccontrfundo.danfe = gcibjdnf.danfe
AND dnccontrfundo.cd_sit NOT IN ('CA','RE')
LEFT JOIN gcrcondper priper
ON priper.id_cond = gcccond.id_cond
AND priper.sq_per = 1
WHERE (
(apcconc.cd_concess = '1586297' OR apcconc.cd_conc_mat = '1586297')
AND gcibjdnf.bjd_situacao = 'I'
AND gcibjdnf.bjd_sit_interna IN ('NO', 'SD') -- assume bjd_sit_interna is in gcibjdnf
)
Вы должны полностью квалифицировать bjd_sit_interna, чтобы все знали, в какой таблице он находится.
Я создал таблицы только с указанными здесь столбцами. Эта часть запроса кажется «работающей», за исключением того, что логика противоречива.
- Вы выполняете LEFT JOIN для apcconc, поэтому, даже если в apcconc нет совпадений, вы должны вернуть строку.
- У вас есть предложение WHERE, для которого требуется строка apccon, поэтому любые результаты без совпадения с apcconc будут отфильтрованы. По сути, ваше левое соединение стало внутренним соединением.
Затем я добавил предложение ORDER BY.
ORDER BY apcconc.nm_apelido, gcibjdnf.danfe; -- danfe must be fully qualified, else ambiguous
Теперь в списке SELECT у вас нет прямых агрегатных функций; они есть только в скалярных подзапросах. Таким образом, вам не нужно, и вы не должны иметь GROUP BY в конце вашего общего запроса!
На самом деле ваш запрос будет выполняться как есть, за исключением неоднозначного столбца в ORDER BY.
Однако вы можете получить странные результаты, поскольку ваши подзапросы MIN и MAX в gcrcondper могут обращаться к строкам, которые не соответствуют условию JOIN. Вы уверены, что это то, что вы хотите?
Вне противоречивой логики JOIN и этой странности MIN / MAX ваш запрос должен работать. Прежде чем говорить о производительности, просмотрите логику, чтобы убедиться, что запрос дает желаемые результаты.