Tôi có một kịch bản live-trường hợp đơn giản trên SQL Server 2014. Tôi có một bảng với đơn đặt hàng và quanities của họ:T-SQL phân phối giá trị giữa các hàng mà không cần một con trỏ
declare @qty_to_distribute int = 50
create table orders (id int, priority int, qty int)
insert into orders (id, priority, qty) values
(1, 1, 10),
(2, 2, 30),
(3, 3, 20),
(4, 4, 5)
Tôi có một giá trị, ví dụ 50, mà tôi phải phân phối giữa các đơn đặt hàng, dựa trên ưu tiên của họ Iiterating thông qua lệnh
- nếu số tiền còn lại là lớn hơn sau đó quanity của trật tự hiện hành, thứ tự sẽ được thực hiện, và
@qty_to_distribute
giảm theo số lượng đơn đặt hàng, - nếu không - đơn đặt hàng bị hủy.
Nhìn vào dữ liệu mẫu - các đơn hàng 1, 2 và 4 sẽ được nhận ra và # 3 bị hủy.
Có một giải pháp đơn giản, hiệu quả và không phải con trỏ, tốt nhất là dựa trên chức năng cửa sổ?
này sẽ hứa hẹn, nhưng không thể tìm ra nơi để đặt các điều kiện:
select id,
sum(qty) OVER (ORDER BY priority asc ROWS UNBOUNDED PRECEDING) as qtysum
from orders
id qtysum
1 10
2 40
3 60 *
4 65 *
http://sqlfiddle.com/#!6/05fa2/2/0
Nhờ sự giúp đỡ, làm việc cho tôi perfecty, và xin lỗi, được AFK cho một còn thời gian. – malpka
cảm ơn, tôi đã xóa bình luận trước đó của tôi :-) –