как получить в результирующей выборке только результаты 'true'

with res_decision
         as (
             select count(app.id) amount, app.id
             from final_decision fd
             join APP_PRE_APROV_LOAN app on app.id = fd.APP_UL_ID
                  and app.status = 1
             where fd.status = 1
             group by app.id
             ),
res_status 
          as (
              select count(app.id) as amount, app.id
              from APP_PRE_APROV_LOAN app
              join status_history sh on app.id = sh.aplication_id
              join LOGS_STATUS_DICT lsd on lsd.id = sh.APP_STATUS
                where sh.status=1
                and lsd.name = 'Сформировано заключение АСПР'
                group by app.id
              )
select case
            when
            (select amount from res_decision where id = app.id)
            !=
            (select amount from res_status   where id = app.id)
            then (select 'true' as result)

            else 'false'
        end as r,
       app.id
from APP_PRE_APROV_LOAN app
where
;

Ответы (2 шт):

Автор решения: teran

у вас есть три связанных таблицы, вы, видимо хотите получить такие записи из основной, для которых значения amount в дополнительных различны. Для этих целей надо к основной таблице присоединить обе другие и отфильтровать по их значениям. Примерно так:

SELECT app.id, d.status, r.status
FROM app
LEFT JOIN res_desicion AS d ON (d.app_id = app.id)
LEFT JOIN res_status AS s ON (s.app_id = app.id )
WHERE d.status <> r.status
→ Ссылка
Автор решения: Konst
with
...
select 'true' as result,
       app.id
from APP_PRE_APROV_LOAN app INNER JOIN res_decision d ON app.id = d.id
    INNER JOIN res_status s ON app.id = s.id
WHERE 
    d.amount != s.amount
→ Ссылка