Masalah Jumlah Tabel Data

Saya punya situasi.

Saya memiliki datatable yang berisi kolom Kredit dan Debit seperti ini

Month     Credit     Debit
Sep       1422825      0
Oct         0        1422825
Oct       1695017.5    0
Nov         0         1400000
Nov         0         295018

Saya ingin keseimbangan yang ditunjukkan seperti ini

Month     Credit     Debit       Balance
Sep       1422825      0
Oct         0        1422825      (1422825 of Credit-1422825 of Debit)=0
Oct       1695017.5    0
Nov         0         1400000     
Nov         0         295018       (1695017.5 of credit-1400000+295018)=0.5

itu harus ditunjukkan pada laporan kristal bagaimana melakukannya.


person Fahad Mirza    schedule 14.06.2013    source sumber
comment
tolong bantu saya melakukan ini.   -  person Fahad Mirza    schedule 14.06.2013
comment
apakah Anda perlu menunjukkan saldo di akhir bulan saja. Seperti dalam kasus November. Atau Anda perlu menunjukkan keseimbangan di setiap baris.   -  person शेखर    schedule 14.06.2013
comment
Ini adalah masalah nilai yang sedang berjalan. Lihat ini. Akan sangat membantu jika Anda menyatakan versi server SQL. Misalnya, ini untuk 2005.   -  person OzrenTkalcecKrznaric    schedule 14.06.2013
comment
Versi SQL saya adalah 2008.   -  person Fahad Mirza    schedule 14.06.2013
comment
untuk shekhar, ya saya butuh saldo setiap bulan tetapi di depan debit.   -  person Fahad Mirza    schedule 14.06.2013
comment
Silakan lihat jawaban yang diperbarui   -  person OzrenTkalcecKrznaric    schedule 14.06.2013


Jawaban (1)


Inilah solusi Anda yang dioptimalkan untuk tahun 2005, saya yakin ini berfungsi dengan baik pada tahun 2008. (gunakan bilangan bulat untuk bulan, lebih mudah...)

DECLARE @Temp TABLE (Month int, Credit money, Debit money, Balance money)

DECLARE @RunningTotal money

SET @RunningTotal = 0

INSERT INTO @Temp
SELECT Month, Credit, Debit, null
FROM Datatable
ORDER BY Month

UPDATE @Temp
SET @RunningTotal = Balance = @RunningTotal + Credit - Debit
FROM @Temp

SELECT * FROM @Temp

EDIT (ini berlanjut dari langkah pertama):

Jika Anda hanya perlu menampilkan total catatan terakhir dalam grup (bulan) maka Anda dapat menggunakan fungsi peringkat, seperti...

;WITH Temp2 AS
(
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY Month
            ORDER BY Credit DESC, Debit DESC -- whatever order inside group you need
        ) AS N
     FROM @Temp
)
SELECT
    Month,
    Credit, 
    Debit, 
    Balance = CASE WHEN N = 1 THEN Balance ELSE NULL END
FROM Temp2

Ini belum diuji, kode ditulis langsung dari kepala saya :P

person OzrenTkalcecKrznaric    schedule 14.06.2013
comment
Ozren yang terhormat, Terima kasih atas jawaban Anda. sangat membantu, tapi sayang saya tidak ingin mendapatkan total berjalan, melainkan saya ingin saldo berjalan setiap bulan. tolong tinjau pertanyaan saya lagi. Terima kasih Tuhan memberkati Anda. - person Fahad Mirza; 14.06.2013
comment
Pertanyaan Anda sepertinya Anda memerlukan semua baris, bukan satu baris per bulan. Jika Anda membutuhkan satu baris per bulan maka Anda menggunakan jumlah umum + grup berdasarkan Bulan. - person OzrenTkalcecKrznaric; 14.06.2013
comment
Dear Ozren, bisakah saya melakukannya menggunakan LINQ? - person Fahad Mirza; 14.06.2013
comment
Mirza, bukan itu pertanyaannya, dan saya sarankan untuk membuka pertanyaan lain jika belum ditanyakan. Anda dapat menjalankan nilai yang dievaluasi menggunakan LINQ dan ada solusi pada SO di sini: http://stackoverflow.com/questions/1834753/linq-to-sql-and-a-running-total-on-hasilyangdipesan. - person OzrenTkalcecKrznaric; 14.06.2013