2016-05-03 5 views
5

Ho due tabelle: magazzino e orderrow:Come controllare per azione disponibili e li assegna a un ordine utilizzando una visualizzazione in SQL Server

magazzino:

*id | name | stockcount 
---------------------------- 
1 | item1 | 10 
2 | item2 | 9 

Orderrow:

id |  date | itemid | ordercount 
------------------------------------------ 
1001 | 1/1/2016 |  1 | 5 
1002 | 1/1/2016 |  2 | 8 
1003 | 1/1/2016 |  2 | 1 
1004 | 1/1/2016 |  1 | 3 
1005 | 1/1/2016 |  1 | 5 

Vorrei avere la seguente vista:

qry_orderrow:

id |  date | itemid | ordercount | stockleft 
------------------------------------------------------ 
1001 | 1/1/2016 | 1 | 5  | 5 
1002 | 1/1/2016 | 2 | 8  | 1 
1003 | 1/1/2016 | 2 | 1  | 0 
1004 | 1/1/2016 | 1 | 3  | 2 
1005 | 1/1/2016 | 1 | 5  | -3 

Come potete vedere ho aggiunto una colonna "Stockleft". Vorrei calcolare lo stock rimasto dopo aver sottratto il numero di articoli del orderrow.

Qualcuno sa come creare questa query utilizzando SQL Server? Non so davvero come farlo, quindi qualsiasi aiuto sarebbe molto apprezzato!

risposta

6

È necessario l'importo cumulativo ordinato e quindi per sottrarlo dall'importo iniziale. Si tratta di un join e una funzione finestra di fantasia:

select o.*, 
     (s.stockcount - 
     sum(o.ordercount) over (partition by itemid order by date) 
     ) as stockleft 
from orderrow o join 
    stock s 
    on o.itemid = s.itemid; 

somme cumulative sono supportati in SQL Server 2012+. Nelle versioni precedenti, puoi fare qualcosa di simile con apply o una sottoquery correlata.

+1

+1: Sai che non ho mai realizzato che hanno cambiato 'SUM (..) OVER (PARTITION BY ..)' dal totale della partizione a un totale parziale all'interno della partizione quando hanno aggiunto il supporto per l'espressione 'ORDER BY' . Ho sempre pensato che dovevi usare le espressioni di finestre più pesanti (Precedenza, Seguendo, ecc.). – RBarryYoung

+0

La funzione windowed deve essere partizionata dall'ID ordine: (PARTITION BY o.itemid ORDER BY o.id) –

+1

Grazie Gordon! Funziona come un fascino – Tony

Problemi correlati