I am trying to convert CTE to a normal query but the result is not same. This is my new query
SELECT
COALESCE(CTE1.kode_barang, CTE2.kode_barang) AS kode_barang,
COALESCE(CTE1.nama, CTE2.nama) AS nama,
CTE1.sisa_JUNI,
CTE1.masuk_JULI,
CTE1.total,
CTE2.keluar_JULI,
CTE2.sisa_JULI
FROM
(
SELECT
COALESCE(s1.kode_barang, s2.kode_barang) AS kode_barang,
COALESCE(s1.nama, s2.nama) AS nama,
COALESCE(s1.sisa, 0) AS sisa_JUNI,
COALESCE(s2.total_jumlah, 0) AS masuk_JULI,
COALESCE(s1.sisa, 0) + COALESCE(s2.total_jumlah, 0) AS total
FROM
(
SELECT
s2.max_tanggal,
s2.kode_barang,
s1.nama,
s2.sisa
FROM
simas_barang s1
LEFT JOIN (
SELECT
sm1.kode_barang,
sm1.tanggal AS max_tanggal,
sm1.created_at,
sm1.sisa
FROM
simas_mutasi sm1
JOIN (
SELECT
kode_barang,
MAX(tanggal) AS max_tanggal,
created_at
FROM
simas_mutasi
WHERE
tanggal BETWEEN '2022-06-01' AND '2022-06-30'
GROUP BY
kode_barang
) sm2 ON sm2.kode_barang = sm1.kode_barang
AND sm2.max_tanggal = sm1.tanggal
GROUP BY
sm1.kode_barang,
sm1.created_at,
sm1.sisa
ORDER BY
sm1.kode_barang,
sm1.created_at DESC
) s2 ON s2.kode_barang = s1.id
WHERE
s1.jenis = 'ATK DAN SEJENISNYA'
GROUP BY
s2.kode_barang
) s1
LEFT JOIN (
SELECT
sm.tanggal,
sm.kode_barang,
sb.nama,
SUM(sm.jumlah) AS total_jumlah
FROM
simas_mutasi sm
JOIN simas_barang sb ON sb.id = sm.kode_barang
WHERE
sb.jenis = 'ATK DAN SEJENISNYA'
AND sm.kegiatan != 'mengeluarkan stok'
AND sm.kegiatan != 'mengubah barang'
AND sm.tanggal BETWEEN '2022-07-01' AND '2022-07-31'
GROUP BY
sb.nama
) s2 ON s1.nama = s2.nama
) CTE1
LEFT JOIN (
SELECT
COALESCE(sm.kode_barang, s1.id) AS kode_barang,
COALESCE(sb.nama, s1.nama) AS nama,
NULL AS sisa_JUNI,
SUM(sm.jumlah) AS keluar_JULI,
s2.sisa AS sisa_JULI
FROM
simas_mutasi sm
LEFT JOIN simas_barang sb ON sb.id = sm.kode_barang
LEFT JOIN (
SELECT
sm1.kode_barang,
sm1.tanggal AS max_tanggal,
sm1.created_at,
sm1.sisa
FROM
simas_mutasi sm1
JOIN (
SELECT
kode_barang,
MAX(tanggal) AS max_tanggal,
created_at
FROM
simas_mutasi
WHERE
tanggal BETWEEN '2022-07-01' AND '2022-07-31'
GROUP BY
kode_barang
) sm2 ON sm2.kode_barang = sm1.kode_barang
AND sm2.max_tanggal = sm1.tanggal
GROUP BY
sm1.kode_barang,
sm1.created_at,
sm1.sisa
ORDER BY
sm1.kode_barang,
sm1.created_at DESC
) s2 ON s2.kode_barang = sb.id
RIGHT JOIN simas_barang s1 ON s1.id = s2.kode_barang
WHERE
COALESCE(sb.jenis, s1.jenis) = 'ATK DAN SEJENISNYA'
GROUP BY
COALESCE(sb.nama, s1.nama)
HAVING
keluar_JULI IS NOT NULL
AND sisa_JULI IS NOT NULL
) CTE2 ON CTE1.kode_barang = CTE2.kode_barang
ORDER BY
nama;
This is my old query with CTE.
WITH CTE1 AS (
SELECT
COALESCE(s1.kode_barang, s2.kode_barang) AS kode_barang,
COALESCE(s1.nama, s2.nama) AS nama,
COALESCE(s1.sisa, 0) AS sisa_JUNI,
COALESCE(s2.total_jumlah, 0) AS masuk_JULI,
COALESCE(s1.sisa, 0) + COALESCE(s2.total_jumlah, 0) AS total
FROM
(
SELECT
s2.max_tanggal,
s2.kode_barang,
s1.nama,
s2.sisa
FROM
simas_barang s1
LEFT JOIN (
SELECT
sm1.kode_barang,
sm1.tanggal AS max_tanggal,
sm1.created_at,
sm1.sisa
FROM
simas_mutasi sm1
JOIN (
SELECT
kode_barang,
MAX(tanggal) AS max_tanggal,
created_at
FROM
simas_mutasi
WHERE
tanggal BETWEEN '2022-06-01' AND '2022-06-30'
GROUP BY
kode_barang
) sm2 ON sm2.kode_barang = sm1.kode_barang
AND sm2.max_tanggal = sm1.tanggal
GROUP BY
sm1.kode_barang,
sm1.created_at,
sm1.sisa
ORDER BY
sm1.kode_barang,
sm1.created_at DESC
) s2 ON s2.kode_barang = s1.id
WHERE
s1.jenis = 'ATK DAN SEJENISNYA'
GROUP BY
s2.kode_barang
) s1
LEFT JOIN (
SELECT
sm.tanggal,
sm.kode_barang,
sb.nama,
SUM(sm.jumlah) AS total_jumlah
FROM
simas_mutasi sm
JOIN simas_barang sb ON sb.id = sm.kode_barang
WHERE
sb.jenis = 'ATK DAN SEJENISNYA'
AND sm.kegiatan != 'mengeluarkan stok'
AND sm.kegiatan != 'mengubah barang'
AND sm.tanggal BETWEEN '2022-07-01' AND '2022-07-31'
GROUP BY
sb.nama
) s2 ON s1.nama = s2.nama
UNION
SELECT
COALESCE(s1.kode_barang, s2.kode_barang) AS kode_barang,
COALESCE(s1.nama, s2.nama) AS nama,
COALESCE(s1.sisa, 0) AS sisa,
COALESCE(s2.total_jumlah, 0) AS total_jumlah,
COALESCE(s1.sisa, 0) + COALESCE(s2.total_jumlah, 0) AS total
FROM
(
SELECT
s2.max_tanggal,
s2.kode_barang,
s1.nama,
s2.sisa
FROM
simas_barang s1
RIGHT JOIN (
SELECT
sm1.kode_barang,
sm1.tanggal AS max_tanggal,
sm1.created_at,
sm1.sisa
FROM
simas_mutasi sm1
JOIN (
SELECT
kode_barang,
MAX(tanggal) AS max_tanggal,
created_at
FROM
simas_mutasi
WHERE
tanggal BETWEEN '2022-06-01' AND '2022-06-30'
GROUP BY
kode_barang
) sm2 ON sm2.kode_barang = sm1.kode_barang
AND sm2.max_tanggal = sm1.tanggal
GROUP BY
sm1.kode_barang,
sm1.created_at,
sm1.sisa
ORDER BY
sm1.kode_barang,
sm1.created_at DESC
) s2 ON s2.kode_barang = s1.id
WHERE
s1.jenis = 'ATK DAN SEJENISNYA'
GROUP BY
s2.kode_barang
) s1
RIGHT JOIN (
SELECT
sm.tanggal,
sm.kode_barang,
sb.nama,
SUM(sm.jumlah) AS total_jumlah,
sm.kegiatan
FROM
simas_mutasi sm
JOIN simas_barang sb ON sb.id = sm.kode_barang
WHERE
sb.jenis = 'ATK DAN SEJENISNYA'
AND sm.kegiatan != 'mengeluarkan stok'
AND sm.kegiatan != 'mengubah barang'
AND sm.tanggal BETWEEN '2022-07-01' AND '2022-07-31'
GROUP BY
sb.nama
) s2 ON s1.nama = s2.nama
WHERE
s1.nama IS NULL
ORDER BY
nama
), CTE2 AS (
SELECT
COALESCE(sm.kode_barang, s1.id) AS kode_barang,
COALESCE(sb.nama, s1.nama) AS nama,
NULL AS sisa_JUNI,
SUM(sm.jumlah) AS keluar_JULI,
s2.sisa AS sisa_JULI
FROM
simas_mutasi sm
LEFT JOIN simas_barang sb ON sb.id = sm.kode_barang
LEFT JOIN (
SELECT
sm1.kode_barang,
sm1.tanggal AS max_tanggal,
sm1.created_at,
sm1.sisa
FROM
simas_mutasi sm1
JOIN (
SELECT
kode_barang,
MAX(tanggal) AS max_tanggal,
created_at
FROM
simas_mutasi
WHERE
tanggal BETWEEN '2022-07-01' AND '2022-07-31'
GROUP BY
kode_barang
) sm2 ON sm2.kode_barang = sm1.kode_barang
AND sm2.max_tanggal = sm1.tanggal
GROUP BY
sm1.kode_barang,
sm1.created_at,
sm1.sisa
ORDER BY
sm1.kode_barang,
sm1.created_at DESC
) s2 ON s2.kode_barang = sb.id
RIGHT JOIN simas_barang s1 ON s1.id = s2.kode_barang
WHERE
COALESCE(sb.jenis, s1.jenis) = 'ATK DAN SEJENISNYA'
GROUP BY
COALESCE(sb.nama, s1.nama)
HAVING
keluar_JULI IS NOT NULL
AND sisa_JULI IS NOT NULL
ORDER BY
COALESCE(sb.nama, s1.nama)
)
SELECT
COALESCE(CTE1.kode_barang, CTE2.kode_barang) AS kode_barang,
COALESCE(CTE1.nama, CTE2.nama) AS nama,
CTE1.sisa_JUNI,
CTE1.masuk_JULI,
CTE2.keluar_JULI,
CTE2.sisa_JULI,
CTE1.total
FROM
CTE1
LEFT JOIN CTE2 ON CTE1.kode_barang = CTE2.kode_barang
UNION
SELECT
COALESCE(CTE1.kode_barang, CTE2.kode_barang) AS kode_barang,
COALESCE(CTE1.nama, CTE2.nama) AS nama,
CTE1.sisa_JUNI,
CTE1.masuk_JULI,
CTE2.keluar_JULI,
CTE2.sisa_JULI,
CTE1.total
FROM
CTE2
LEFT JOIN CTE1 ON CTE1.kode_barang = CTE2.kode_barang
ORDER BY
2;
I am new with CTE. I am trying to find a converter CTE to a normal Query or Query to laravel but I couldn't find it. What's wrong with my new query? How can I solve this problem. Please help me to fix this query.