Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cần chọn dữ liệu từ một bảng sau khi trừ đi với một giá trị

Cách dễ nhất để làm điều này là sử dụng một tập hợp đang chạy. Trong ví dụ ban đầu của bạn, bạn có hai bảng và nếu trường hợp này xảy ra, chỉ cần chạy một tổng trên bảng đó giống như tôi đang làm trong phần chọn con và lưu trữ giá trị đó trong biến mà tôi đã tạo @Sum.

CTE tính toán giá trị sẽ là bao nhiêu khi nó được cộng lại với nhau cho mỗi bản ghi, sau đó được cộng vào tổng số đã tính, rồi giữ lại những giá trị dương.

Tôi tin rằng điều này sẽ phù hợp với nhu cầu của bạn.

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. Cú pháp truy vấn cập nhật SQL với liên kết bên trong

  2. Bảng HTML tiêu chuẩn với tổng số từ bảng SQL Server

  3. Cần T-SQL trợ giúp để chuyển đổi Hàng từ nhiều bảng thành Cột có giá trị trong Sql Server 2005

  4. Làm cách nào để chèn tất cả vào hai bảng cùng một lúc trong một thủ tục được lưu trữ?

  5. Thứ tự theo ngày giảm dần - tháng, ngày và năm