Storicamente, probabilmente avrei scritto uno script (php o qualcosa) per scorrere tutte le righe del foglio di calcolo ed eseguire alcuni calcoli.
Sto cercando una soluzione SQL pura sulla presunzione che SQL abbia opzioni migliori dei cicli.
Come dovrei affrontare questo problema mentre utilizzo un approccio SQL puro?
PANORAMICA DEI DATI:
Abbiamo una lista (attualmente in un foglio di calcolo) di articoli per i quali vogliamo controllare l'andamento.
Facciamo finta che quel foglio di calcolo contenga questi tre elementi; 111111, 222222 e 888888.
Nel DB, abbiamo una tabella degli snapshot dell'inventario dei fornitori. Ecco un esempio semplificato:
(vedi il violino qui) .
CREATE TABLE inventory_snapshots
([id] int, [vendor_id] int, [item] int, [brand] varchar(1), [inventory_version] int, [quantity] int);
INSERT INTO inventory_snapshots
([id], [vendor_id], [item], [brand], [inventory_version], [quantity])
VALUES
(1, 111, 111111, 'A', 5, 45),
(2, 111, 111111, 'B', 5, 43),
(3, 111, 222222, 'X', 5, 12),
(4, 222, 111111, 'B', 4, 5),
(5, 222, 888888, 'C', 4, 50),
(6, 222, 111111, 'D', 5, 10),
(7, 222, 888888, 'C', 5, 100),
(8, 111, 111111, 'A', 6, 40),
(9, 111, 222222, 'X', 6, 10);
Si noti che un venditore può avere più righe di un articolo in una determinata versione di inventario a causa delle differenze di marchio.
Obiettivo:
Il nostro obiettivo è vedere le tendenze su tutti i fornitori.
Ciò significa confrontare un elenco (attualmente in formato foglio di calcolo) di elementi rispetto al DB da recuperare:
- numero articolo
- starting qty (somma di qty dal numero di versione MIN per ogni
- fornitore, articoli raggruppati per vendor_id, inventory_version) aumenti totali (somma di ogni versione della versione di ogni fornitore aumenta in qty) totale
- aumenta (la somma di ogni versione della versione di ogni fornitore aumenta in qty)
- terminare qty (somma di qty dal numero di versione MAX per ciascun fornitore, elementi raggruppati per vendor_id, inventory_version)
Per un altro esempio, vedi il commento in il violino.
SOMMARIO:
Sembra che SQL Server possa fare un po 'di loop, ma non è pratico.
Qual è un modo migliore per avvicinarsi a questo?