Rumah > Soal Jawab > teks badan
Ada masalah dengan pertanyaan saya. Saya mempunyai dua jadual dan saya mahu menyertainya untuk mendapatkan hasil berdasarkan kunci utama pada jadual pertama, tetapi saya kehilangan 1 keping data daripada jadual pertama.
Ini biola saya
Seperti yang anda lihat, saya kehilangan "xx3" untuk bulan 1
Saya cuba menukar sambungan kiri dan kanan tetapi hasilnya masih sama.
Jadi seperti yang anda lihat, saya perlu menetapkan coalesce(sum(b.sd_qty),0) 设置为总计,
如果没有 qty
,则将 0
kepada nilai lalai.
P粉2877263082024-02-26 09:49:06
Anda juga harus silang menyertai jadual ke tarikh yang berbeza:
SELECT a.item_code, COALESCE(SUM(b.sd_qty), 0) total, DATE_FORMAT(d.sd_date, '%m-%Y') month_year FROM item a CROSS JOIN ( SELECT DISTINCT sd_date FROM sales_details WHERE sd_date >= '2020-04-01' - INTERVAL 3 MONTH AND sd_date < '2020-05-01' ) d LEFT JOIN sales_details b ON a.item_code = b.item_code AND b.sd_date = d.sd_date GROUP BY month_year, a.item_code ORDER BY month_year, a.item_code;
Sebagai alternatif, untuk MySql 8.0+, gunakan CTE rekursif untuk mengembalikan tarikh mula semua bulan yang anda inginkan hasilnya, yang boleh dicantum silang ke jadual:
WITH RECURSIVE dates AS ( SELECT '2020-04-01' - INTERVAL 3 MONTH AS sd_date UNION ALL SELECT sd_date + INTERVAL 1 MONTH FROM dates WHERE sd_date + INTERVAL 1 MONTH < '2020-05-01' ) SELECT a.item_code, COALESCE(SUM(b.sd_qty), 0) total, DATE_FORMAT(d.sd_date, '%m-%Y') month_year FROM item a CROSS JOIN dates d LEFT JOIN sales_details b ON a.item_code = b.item_code AND DATE_FORMAT(b.sd_date, '%m-%Y') = DATE_FORMAT(d.sd_date, '%m-%Y') GROUP BY month_year, a.item_code ORDER BY month_year, a.item_code;
Lihat Demo.