Tôi có một bảng tạm thời trong SQL server như dưới đâyComplex chọn truy vấn cho SQL Server
╔═══════╦═════════╦══════╦═════════╗
║Serial ║ Account ║ Due ║ Balance ║
║1 ║ A1 ║ 1000 ║ 3100 ║
║2 ║ A1 ║ 1000 ║ 3100 ║
║3 ║ A1 ║ 1000 ║ 3100 ║
║4 ║ A1 ║ 1000 ║ 3100 ║
║1 ║ A2 ║ 100 ║ 3100 ║
║2 ║ A2 ║ 100 ║ 3100 ║
║1 ║ B1 ║ 1000 ║ 1100 ║
║2 ║ B1 ║ 1000 ║ 1100 ║
║1 ║ B2 ║ 100 ║ 1100 ║
║2 ║ B2 ║ 100 ║ 1100 ║
╚═══════╩═════════╩══════╩═════════╝
Tôi muốn xác định các hàng mà do sẽ được thu thập. A1 và A2 Do sẽ được thu thập từ 3100 và B1 và B2 do sẽ được thu thập từ 1100.
Thứ nhất tôi đã sử dụng tích lũy Do như sau
╔═══════╔═════════╦══════╦════════════╦═════════╦
║Serial ║ Account ║ Due ║ Cumulative ║ Balance ║
║1 ║ A1 ║ 1000 ║ 1000 ║ 3100 ║
║2 ║ A1 ║ 1000 ║ 2000 ║ 3100 ║
║3 ║ A1 ║ 1000 ║ 3000 ║ 3100 ║
║4 ║ A1 ║ 1000 ║ 4000 ║ 3100 ║
║1 ║ A2 ║ 100 ║ 100 ║ 3100 ║
║2 ║ A2 ║ 100 ║ 200 ║ 3100 ║
║1 ║ B1 ║ 1000 ║ 1000 ║ 1100 ║
║2 ║ B1 ║ 1000 ║ 2000 ║ 1100 ║
║1 ║ B2 ║ 100 ║ 100 ║ 1100 ║
║2 ║ B2 ║ 100 ║ 200 ║ 1100 ║
╚═══════╚═════════╩══════╩════════════╩═════════╝
Bây giờ tôi muốn chọn hàng sau khi sản lượng
╔═══════╔═════════╦══════╦════════════╦═════════╦
║Serial ║ Account ║ Due ║ Cumulative ║ Balance ║
║1 ║ A1 ║ 1000 ║ 1000 ║ 3100 ║
║2 ║ A1 ║ 1000 ║ 2000 ║ 3100 ║
║3 ║ A1 ║ 1000 ║ 3000 ║ 3100 ║
║1 ║ A2 ║ 100 ║ 100 ║ 3100 ║
║1 ║ B1 ║ 1000 ║ 1000 ║ 1100 ║
║1 ║ B2 ║ 100 ║ 100 ║ 1100 ║
╚═══════╚═════════╩══════╩════════════╩═════════╩
Đây là nơi tôi bị kẹt. Làm thế nào tôi có thể chọn những hàng mà không cần sử dụng con trỏ hoặc vòng lặp. Tất cả tôi muốn làm điều này với lệnh chọn và các chức năng cửa sổ. Cảm ơn.
Giải pháp có thể: Nếu bảng có thể được cập nhật như sau thì vấn đề sẽ được giải quyết.
╔═══════╔═════════╦══════╦═══════════════════╦
║Serial ║ Account ║ Due ║ Balance Remaining ║
║1 ║ A1 ║ 1000 ║ 3100 ║
║2 ║ A1 ║ 1000 ║ 2100 ║
║3 ║ A1 ║ 1000 ║ 1100 ║
║4 ║ A1 ║ 1000 ║ 100 ║
║1 ║ A2 ║ 100 ║ 100 ║
║2 ║ A2 ║ 100 ║ 0 ║
║1 ║ B1 ║ 1000 ║ 1100 ║
║2 ║ B1 ║ 1000 ║ 100 ║
║1 ║ B2 ║ 100 ║ 100 ║
║2 ║ B2 ║ 100 ║ 0 ║
╚═══════╚═════════╩══════╩═══════════════════╩
Các trường hợp Số dư Còn bằng/lớn hơn Do chúng tôi cập nhật nó với sự khác biệt nào khác nó sẽ vẫn như trước đây. Vấn đề là ở đây để cập nhật hàng bằng cách phân vùng giữa A & B.
CẬP NHẬT tôi cung cấp liên kết với dữ liệu mới thiết lập để thể hiện yêu cầu của tôi rõ ràng hơn. new dataset
Phiên bản SQL Server nào? – mellamokb
SQL SERVER 2012 trở lên. – Esty
Vấn đề là ngay cả với các chức năng cửa sổ mạnh mẽ được cung cấp trong SQL Server 2012, không có cách nào tốt để tổng tích lũy có điều kiện. Nói cách khác, đóng góp vào tổng điều kiện dựa trên việc tổng số trước đó có lớn hơn số dư hay không.Một giải pháp dựa trên con trỏ có lẽ sẽ là giải pháp dễ nhất và hiệu quả nhất - tại sao bạn không muốn một giải pháp dựa trên con trỏ? – mellamokb