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


sort_accounts as (
    select
        g.group_account,
        g.group_no,
        r.service_type,
        (
            select min(ind.id)
            from ourpension.spr_indicator_bu ind
            join ourpension.spr_accounts_indicator_bu sa
                on sa.spr_indicator_bu_id = ind.id
            where sa.account = g.anchor_account
              and r.service_type = any(ind.service_type)
        ) as sort_id
    from (
        values
            ('38911', '38911.1', 1),
            ('39011', '39011.1', 1),
            ('39031', '39033',   1),
            ('39032', '39033',   2),
            ('39033', '39033',   3),
            ('39034', '39034.2', 1),
            ('39035', '48305',   1),
            ('39036', '48305',   2),
            ('39037', '48305',   3),
            ('48305', '48305',   4),
            ('48306', '48306',   1)
    ) as g(group_account, anchor_account, group_no)
    join back_office.report_conformity_pu_bu r
        on r.id = $P{id}
       and r.service_type in ('NPO', 'PDS')
),
indicator_order as (
    select
        si.id,
        min(g.sort_id) as sort_id,
        min(g.group_no) as group_no,
        min(
            case
                when sa.account = g.group_account then 0
                when sa.account = g.group_account || '.1' then 1
                when sa.account = g.group_account || '.2' then 2

                when g.group_account in ('48305', '48306')
                 and sa.account = g.group_account || '.3'
                    then 2

                when g.group_account = '48305'
                 and sa.account = '48310' then 3

                when g.group_account = '48306'
                 and sa.account = '48309' then 3

                when g.group_account = '48305'
                 and sa.account = '60301' then 4

                when g.group_account = '48306'
                 and sa.account = '60302' then 4

                when g.group_account = '48305'
                 and sa.account = '60322' then 5

                when g.group_account = '48306'
                 and sa.account = '60323' then 5
            end
        ) as row_no
    from sort_accounts g
    join ourpension.spr_accounts_indicator_bu sa
        on sa.account in (
            g.group_account,
            g.group_account || '.1',
            g.group_account || '.2'
        )
        or (
            g.group_account = '48305'
            and sa.account in (
                '48305.3', '48310', '60301', '60322'
            )
        )
        or (
            g.group_account = '48306'
            and sa.account in (
                '48306.3', '48309', '60302', '60323'
            )
        )
    join ourpension.spr_indicator_bu si
        on si.id = sa.spr_indicator_bu_id
       and g.service_type = any(si.service_type)
    group by si.id
)
select
    rr.id,
    rr.step,
    rr.name,
    rr.accounts,
    rr.s_pu,
    rr.s_bu,
    rr.razn
from report_rows rr
left join indicator_order io
    on io.id = rr.id
order by
    coalesce(io.sort_id, rr.id),
    coalesce(io.group_no, 0),
    coalesce(io.row_no, 0),
    rr.id,
    rr.step