Переместите подзапрос в предложение from и используйте условное агрегирование, чтобы получить различные суммы:
select
la.name,
la.id,
la.parent_id,
la.is_group,
tb1.opening op_1,
tb1.closing cl_1,
sums.balance_2018,
sums.balance_2019,
sums.balance_2020
from ledger_account la
left join trialb tb1 on tb1.ledger_account_id = la.id and tb1.fy_id = 1
left join
(
select
j.ledger_account_id,
sum(case when v.posted_date::date >= date '2018-04-01' and v.posted_date::date <= date '2019-03-31') then j.amount else 0 end) as balance_2018,
sum(case when v.posted_date::date >= date '2019-04-01' and v.posted_date::date <= date '2020-03-31') then j.amount else 0 end) as balance_2019,
sum(case when v.posted_date::date >= date '2020-04-01' and v.posted_date::date <= date '2021-03-31') then j.amount else 0 end) as balance_2020
from journal j
join voucher v on v.id = j.voucher_id
group by j.ledger_account_id
) sums on sums.ledger_account_id = la.id
order by la.name;
Если вы не хотите фиксированных лет, то вы не можете использовать столбцы, но вместо этого должны использовать строки. Вам нужно вычислить, чтобы получить дату от финансового года, но это всего лишь вычитание трех месяцев из него.
select
la.name,
la.id,
la.parent_id,
la.is_group,
tb1.opening op_1,
tb1.closing cl_1,
sums.fiscal_year
sums.balance
from ledger_account la
left join trialb tb1 on tb1.ledger_account_id = la.id and tb1.fy_id = 1
left join
(
select
j.ledger_account_id,
extract(year from v.posted_date - interval '3 months') as fiscal_year
sum(j.amount) as balance
from journal j
join voucher v on v.id = j.voucher_id
group by j.ledger_account_id, extract(year from v.posted_date - interval '3 months')
) sums on sums.ledger_account_id = la.id
order by la.name, sums.fiscal_year;
Ваше приложение должно обрабатывать годовые данные учетной записи в al oop.
Если вы хотите избежать получения очень большого набора результатов и ограничить его определенными годами, вы можете добавить этот критерий, например,
...
where extract(year from v.posted_date - interval '3 months') between 2010 and 2020
group by j.ledger_account_id, extract(year from v.posted_date - interval '3 months')
...