Mam proste żywo scenariusz na SQL Server 2014. Mam tabeli z zamówienia i ich ilości grubszych:T-SQL dystrybuować wartość między rzędami bez kursora
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)
mam wartość, na przykład 50, który muszę rozprowadzać między zamówień, na podstawie ich priorytetu Iiterating przez zleceń
- jeżeli kwota lewo jest większa wtedy quanity bieżącego zlecenia, zlecenie zostanie zrealizowane, a
@qty_to_distribute
zmniejszona według ilości zamówienia, - jeśli nie - zamówienie zostanie anulowane.
Przyjrzyj się przykładowym danym - zamówienia 1, 2 i 4 zostaną zrealizowane, a # 3 anulowane.
Czy istnieje proste, efektywne rozwiązanie bez kursora, najlepiej oparte na funkcjach okna?
To wygląda obiecująco, ale nie można dowiedzieć się, gdzie umieścić warunki:
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
Dzięki za pomoc, działa na mnie perfecty, i przepraszam, byłem AFK na dłuższy czas. – malpka
dzięki, usunąłem mój poprzedni komentarz :-) –