Mengira Jumlah dengan Tarikh Nilai Bersyarat
Dalam penyata SQL, anda ingin mengira jumlah tunai untuk setiap ID transaksi unik dalam tempoh yang lepas bulan. Untuk mencapai matlamat ini, anda perlu mengubah suai penyata sedia ada untuk memasukkan syarat bahawa hanya nilai tunai dengan tarikh nilai selepas tarikh tertentu harus disertakan.
Untuk menangani perkara ini, anda cuba menggunakan penyata CASE, tetapi mengalami ralat kerana sintaks yang salah.
Sintaks yang betul untuk ungkapan CASE yang dicari ialah:
CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END
Ungkapan hendaklah diubah suai seperti berikut:
SUM(CASE WHEN ValueDate > @startMonthDate THEN cash ELSE 0 END)
Ungkapan ini menilai medan ValueDate untuk setiap rekod. Jika ValueDate lebih besar daripada tarikh bulan mula yang ditentukan, nilai tunai dikembalikan; jika tidak, 0 dikembalikan. Nilai yang terhasil kemudiannya dijumlahkan untuk memberikan jumlah tunai untuk tempoh yang ditentukan.
Pendekatan Alternatif
Untuk prestasi yang lebih baik, pertimbangkan untuk menggunakan penyata JOIN dan GROUP BY dan bukannya subquery bergantung:
SELECT SUM(cash) FROM Table_a AS a JOIN Table_b AS b ON a.branch = b.branch AND a.transID = b.transID WHERE ValueDate > @startMonthDate GROUP BY a.transID
Pendekatan ini mengelakkan overhed yang dikaitkan dengan subquery dan boleh mengakibatkan masa pelaksanaan yang lebih pantas.
Atas ialah kandungan terperinci Bagaimana Menjumlahkan Nilai Tunai dengan Cekap mengikut ID Transaksi Berdasarkan Tarikh Nilai dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!