Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Duplizieren von Zeilen basierend auf einem Spaltenwert in jeder Zeile

Dies unterstützt über 7.400 Wiederholungen für jeden einzelnen Job (auf meinem System). Wenn Sie mehr benötigen, können Sie eine andere Systemtabelle oder einen Cross Join verwenden.

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;