Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Duplicazione di righe in base al valore di una colonna in ogni riga

Ciò supporterà oltre 7.400 ripetizioni per ogni singolo lavoro (sul mio sistema). Se ne hai bisogno di più, puoi utilizzare una tabella di sistema diversa o un cross join.

DECLARE @d TABLE (Job INT, Quantity INT, Status VARCHAR(12), Repeat INT);

INSERT @d SELECT 1, 100, 'OK'  ,2
UNION ALL SELECT 2, 400, 'HOLD',0
UNION ALL SELECT 3, 200, 'HOLD',1
UNION ALL SELECT 4, 450, 'OK'  ,3;

WITH x AS 
(
  SELECT TOP (SELECT MAX(Repeat)+1 FROM @d) rn = ROW_NUMBER() 
  OVER (ORDER BY [object_id]) 
  FROM sys.all_columns 
  ORDER BY [object_id]
)
SELECT * FROM x
CROSS JOIN @d AS d
WHERE x.rn <= d.Repeat + 1
ORDER BY Job;