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);
-- -------------------------------------------------------------------- --
-- 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