giovedì 21 luglio 2011

Come simulare un un-group by

Ogni riga può aver valorizzato il campo quantità con valori da 1 ad n. Nel caso in cui si renda necessaria la duplicazione della riga tante volte quanto è il valore relativo la quantità si può utilizzare uno script simile a quello riportato:

-- -------------------------------------------------------------------- --
-- CREAZIONE TABELLA TEMPORANEA CON DATI DA REPLICARE (table variables) --
-- -------------------------------------------------------------------- --
DECLARE @SourceTable TABLE (
  code VARCHAR(30),
  amount INT
);

-- Popolamento della tabella temporanea
INSERT INTO @SourceTable (code, amount) VALUES ('one',1);
INSERT INTO @SourceTable (code, amount) VALUES ('two',2);
INSERT INTO @SourceTable (code, amount) VALUES ('tree',3);

-- Lettura della tabella temporanea
SELECT *
FROM @SourceTable;

-- ---------------------------------------------------------- --
-- CREAZIONE TABELLA CONTATORE (Common Table Expressions CTE) --
-- ---------------------------------------------------------- --
DECLARE @start INT, @end INT;
SELECT @start=1, @end=100;

;WITH NumberSequence( Number ) AS (
  SELECT @start AS Number
UNION ALL
  SELECT Number + 1 FROM NumberSequence WHERE Number < @end)
      
-- ------------------- --
-- JOIN di UN-GROUP BY --
-- ------------------- --
SELECT 
ST.code, 
ST.amount
FROM 
@SourceTable AS ST
left outer join NumberSequence AS NS ON NS.Number <= ST.amount OPTION (MaxRecursion 100);

Nessun commento:

Posta un commento