Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Perlu Memilih Data Dari Satu Tabel Setelah Dikurangi Dengan Satu Nilai

Cara termudah untuk melakukannya adalah dengan menggunakan agregat berjalan. Dalam contoh asli Anda, Anda memiliki dua tabel, dan jika ini masalahnya, cukup jalankan penjumlahan pada tabel itu seperti yang saya lakukan di subselect dan simpan nilai itu dalam variabel yang saya buat @Sum.

CTE menghitung berapa nilainya saat ditambahkan bersama untuk setiap catatan, dan kemudian ditambahkan ke total yang dihitung, dan kemudian menyimpan yang positif.

Saya yakin ini akan sesuai dengan kebutuhan Anda.

DECLARE @Sum INT;
SET @Sum = 800;

WITH    RunningTotals
          AS (
               SELECT   [SNo]
                      , [Amount]
                      , [Amount] + (
                                     SELECT ISNULL(SUM([Amount]), 0)
                                     FROM   [Table1] t2
                                     WHERE  t2.[SNo] < t.SNo
                                   ) [sums]
               FROM     [Table1] t
    ),
    option_sums
      AS (
           SELECT   ROW_NUMBER() OVER ( ORDER BY [SNo] ) [SNo]
                  , CASE WHEN ( [Sums] - @Sum ) > 0 THEN [Sums] - @Sum
                         ELSE [Amount]
                    END AS [Amount]
                  , sums
                  , [Amount] [OriginalAmount]
                  , [OriginalID] = [SNo]
           FROM     [RunningTotals] rt
           WHERE    ( [Sums] - @Sum ) > 0
         )
 SELECT [SNo]
      , CASE [SNo]
          WHEN 1 THEN [Amount]
          ELSE [OriginalAmount]
        END AS [Amount]
      , [OriginalID]
 FROM   option_sums 

SNo Amount  OriginalID
--- ------  ----------
1   200     3
2   100     4
3   100     5
4   500     6
5   400     7
6   100     8
7   200     9



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. RODBC odbcDriverConnect() Kesalahan Koneksi

  2. Menghapus Baris Terkait dalam Hubungan Banyak-ke-Banyak

  3. Buat string biner nol, dengan panjang variabel

  4. Hirarki Database Pilih / Sisipkan Pernyataan (SQL Server)

  5. C# ASP.Net:Pengecualian (hanya beberapa kali) selama operasi basis data yang lama