Все ваши внутренние запросы основаны на группе, состоящей из двух частей: kdsatker и akun. Поскольку это возможно для любого из tb_simponi, tb_span, tb_upt может иметь любую комбинацию, я бы предварительно объединил все возможные комбинации этих ПЕРВЫХ. ТОГДА присоединяйтесь к сводным результатам. и НАКОНЕЦ получить компоненты akun и kdsatker. Что-то вроде ...
SELECT
tb_satker.kdsatker,
coalesce( tb_akun.akun, 0 ) akun,
coalesce( tb_simponi2.simponi, 0 ) simponi,
coalesce( tb_span2.span, 0 ) span,
coalesce( tb_upt2.upt, 0 ) upt
FROM
tb_satker
LEFT JOIN
( SELECT distinct kdsatker, akun FROM tb_simponi
UNION
SELECT kdsatker, akun FROM tb_span
UNION
SELECT kdsatker, akun FROM tb_upt
) AllKdAkun
on tb_satker.kdsatker = AllKdAkun.kdsatker
LEFT JOIN tb_akun
on AllKdAkun.akun = tb_akun.akun
LEFT JOIN
(SELECT kdsatker, akun, sum(tb_simponi.jumlah) as simponi
FROM tb_simponi
GROUP BY kdsatker, akun ) as tb_simponi2
ON AllKdAkun.kdsatker = tb_simponi2.kdsatker
AND AllKdAkun.Akun = tb_simponi2.akun
LEFT JOIN
(SELECT kdsatker, akun, sum(tb_span.jumlah) as span
FROM tb_span
GROUP BY kdsatker, akun ) as tb_span2
ON AllKdAkun.kdsatker = tb_span2.kdsatker
AND AllKdAkun.akun = tb_span2.akun
LEFT JOIN
(SELECT kdsatker, akun, sum(tb_upt.jumlah) as upt
FROM tb_upt
GROUP BY kdsatker, akun) as tb_upt2
ON AllKdAkun.kdsatker = tb_upt2.kdsatker
AND AllKdAkun.akun = tb_upt2.akun
Нет последней группы на внешнем уровне.
Первый уровень - ваш tb_satker
. Запись может быть (или нет) в любой из вспомогательных таблиц, так что это первая.
Второй уровень - это отдельный список каждого kdsatker, akun
в ЛЮБОЙ из трех других таблиц. Итак, теперь вы можете LEFT JOIN kdsatker
, таким образом сохраняя каждую запись, включая 1, 2, 3, даже если 2 и 3 не имеют записей.
Со второго уровня вы можете теперь присоединиться к tb_akun
таблица, которая в данном случае только kdsatker
является единственной с записями для любого данного акуна.
Наконец, присоединение к списку предварительного объединения всех комбинаций, сгруппированных по kdsatker, akun
, может быть сопоставлено для их окончательного резюме в окончательный список.
Надеюсь, каждый шаг имеет смысл для того, что вы пытаетесь сделать.