Tabella_A: tipi di ordine
ID Tipo_Ordine da_num a_num
1 tipo_1 1001 2000
2 tipo_2 2001 8000
... ... ... ...
Tabella_B: ordini
Num_Ordine Cliente
1507 Cliente_A
6801 Cliente_B
... ...
La tabella A non contiene il tipo di ordine per ogni numero, ma ogni riga è un range di numeri ordine.
Creo una terza tabella, che contiene tutte le righe potenziali degli ordini con il loro tipo, con un ciclo WHILE: */
-- parto dal primo prodotto
DECLARE @id AS bigint = (SELECT min(ID) FROM Tabella_A)
-- parto dall'inizio del range
DECLARE @da_num as bigint = (SELECT da_num FROM Tabella_A WHERE id=@id)
-- tabella temporanea di output
CREATE TABLE #temp
(
Num_Ordine bigint,
Tipo_Ordine varchar(255),
)
-- eseguo l'insert fino all'ultimo ID presente nella tabella_A
WHILE (SELECT max(ID) FROM Tabella_A)>@id
BEGIN
-- eseguo l'insert fino all'ultimo numero_ordine presente nella tabella_A
WHILE (SELECT a_num-@da_num FROM Tabella_A where id=@id)>-1
BEGIN
INSERT INTO #temp
SELECT @da_num as Num_Ordine,
Tipo_Ordine
FROM Tabella_A
WHERE id = @id
SET @da_num += 1 -- passo al numero di ordine successivo
END
SET @id += 1 -- passo al tipo_ordine successivo
END
/* La tabella temporanea #temp contiene ora l'elenco di tutti i potenziali ordini e il tipo corrispondente, e può essere messa in JOIN con la tabella_B. */
No comments:
Post a Comment