Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Duplicando linhas com base em um valor de coluna em cada linha


Isso suportará mais de 7.400 repetições para qualquer trabalho individual (no meu sistema). Se precisar de mais, você pode usar uma tabela de sistema diferente ou uma junção cruzada.
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;