Saya tidak dapat memahami kode ini' bug
ID AccountID Quantity
1 1 10 Sum = 10
2 1 5 = 10 + 5 = 15
3 1 2 = 10 + 5 + 2 = 17
4 2 7 = 7
5 2 3 = 7 + 3 = 10
SELECT ID, AccountID, Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ) AS TopBorcT,
FROM tCariH
Sepertinya Anda mengharapkan kueri untuk mengembalikan total yang berjalan, tetapi itu pasti memberi Anda nilai yang sama untuk kedua partisi AccountID
.
Untuk mendapatkan total berjalan dengan SUM() OVER ()
, anda perlu menambahkan sub-klausa ORDER BY
setelah PARTITION BY ...
, seperti ini:
SUM(Quantity) OVER (PARTITION BY AccountID ORDER BY ID)
Tapi ingat, tidak semua sistem database mendukung ORDER BY
dalam klausa OVER
dari fungsi window aggregate. (Misalnya, SQL Server tidak mendukungnya sampai versi terbaru, SQL Server 2012).
jika Anda menggunakan SQL 2012, Anda harus mencoba
SELECT ID,
AccountID,
Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ORDER BY AccountID rows between unbounded preceding and current row ) AS TopBorcT,
FROM tCariH
jika tersedia, urutan yang lebih baik berdasarkan kolom tanggal.
Pertanyaan akan seperti ini:
SELECT ID, AccountID, Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ) AS TopBorcT
FROM #Empl ORDER BY AccountID
Partisi berdasarkan bekerja seperti grup berdasarkan. Di sini kita mengelompokkan berdasarkan AccountID sehingga jumlah akan sesuai dengan AccountID.
Kasus pertama, AccountID = 1, maka sum(quantity) = 10 + 5 + 2 => 17 & Untuk AccountID = 2, maka sum(Quantity) = 7+3 => 10
sehingga hasilnya akan muncul seperti terlampir snapshot.