ho un semplice scenario live-caso sulla SQL Server 2014. Ho una tabella con ordini e le loro quantità?:T-SQL distribuire un valore compreso tra le righe senza un cursore
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)
ho un valore, per esempio 50, che devo distribuire tra gli ordini, in base alla priorità Iiterating attraverso gli ordini
- se la quantità di sinistra è maggiore quanity dell'ordine corrente, l'ordine sarà realizzata, e la
@qty_to_distribute
ridotto dalla quantità dell'ordine, - in caso contrario - l'ordine è annullato.
Osservando i dati di esempio, gli ordini 1, 2 e 4 saranno realizzati e # 3 annullati.
Esiste una soluzione semplice, efficace e senza cursore, preferibilmente basata su funzioni della finestra?
Questo sembra essere molto promettente, ma non riesco a capire dove mettere le condizioni:
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
Grazie per l'aiuto, per me funziona perfecty, e mi dispiace, stato AFK per un lungo istante. – malpka
grazie, ho cancellato il mio commento precedente :-) –