T-SQL: Creare una tabella completa a partire da una tabella con dei range

/* Tabelle originarie senza possibilità di JOIN

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