Загрузка данных


select
    c.number as contract_number,
    lower(btrim(i.last_name)) as last_name,
    lower(btrim(i.first_name)) as first_name,
    count(distinct c.individual_id) as individual_count,
    string_agg(
        distinct concat_ws(
            ' ',
            i.last_name,
            i.first_name,
            i.middle_name,
            '(individual_id=' || c.individual_id || ')',
            '(application_termination_contract_id=' || ct.id || ')'
        ),
        '; '
    ) as persons
from ourpension.contract c

join ourpension.individual i
    on i.id = c.individual_id

join ourpension.sharer sh
    on sh.contract_id = c.id

join ourpension.application_termination_contract_data ctd
    on sh.id = ctd.sharer_id

join ourpension.application_termination_contract ct
    on ct.id = ctd.application_termination_contract_id
   and ct.accepted is not null
   and ct.rejected is null
   and ct.canceled is null
   and ct.termination_type in ('TRANSFER', 'PAYMENT', 'FULL')

where c.individual_id is not null

group by
    c.number,
    lower(btrim(i.last_name)),
    lower(btrim(i.first_name))

having count(distinct c.individual_id) > 1

order by
    c.number,
    last_name,
    first_name;