Duplicating rows based on a column value in each row

前端 未结 4 715
星月不相逢
星月不相逢 2020-12-17 21:11

I\'ve this table with the following data

Job    Quantity Status Repeat
1      100      OK     2
2      400      HOLD   0
3      200      HOLD   1
4      450          


        
4条回答
  •  鱼传尺愫
    2020-12-17 21:53

    This will support over 7,400 repeats for any individual job (on my system). If you need more, you can use a different system table or a 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;
    

提交回复
热议问题