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

Tự động tính toán các cột trong bảng sql dựa trên dữ liệu hàng trước đó

Giả định

1. Cấu trúc bảng của bạn giống như

Date | In Stock | Out Stock

2.Bạn sẽ chèn một Cột mới trước khi tính toán balance .

3. Ngày là một Primary Column ( Duy nhất + Không ĐẦY ĐỦ )

Theo các giả định trên:

Bạn đã tạo một SP nếu bạn muốn sử dụng trong C #

1.Tạo bảng tạm thời và chỉ định Row Number sử dụng Xếp hạng ()

select 
rank() OVER (ORDER BY [Date]) as [Rank],
t1.[Date],
t1.[in stock],
t1.[out stock]
--,t1.[in stock]-t1.[out stock] balance
into #temp1
from (your table name)
;

2.Bây giờ bạn sẽ sử dụng temp table ở trên để lấy Số dư

WITH x AS
(
    SELECT 
        [Rank],
        [Date],
        [in stock],
        [out stock],
        bal=([in stock]-[out stock])
    FROM #temp1
    WHERE [Rank] = 1
    UNION ALL
    SELECT 
        y.[Rank],
        y.[Date],
        y.[in stock],
        y.[out stock],
        x.bal+(y.[in stock]-y.[out stock])
    FROM x INNER JOIN #temp1 AS y
    ON y.[Rank] = x.[Rank] + 1
)
SELECT 
    [Date],
    [in stock],
    [out stock],
    Balance = bal
FROM x
ORDER BY Date
OPTION (MAXRECURSION 10000);

Đây là SQL Fiddle nơi bạn có thể xác minh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Việc chuyển đổi giá trị varchar đã làm tràn một cột int

  2. Chỉ mục văn bản đầy đủ của SQL Server

  3. Chuyển đổi DateTime sang định dạng YYYY-MM-DD trong SQL Server

  4. SQL được tạo động so với các tham số trong SQL Server

  5. Cơ sở dữ liệu [dbName] không thể truy cập được. (ObjectExplorer)