Declare @OrigTab Table(Part varchar(30), qty int)insert into @OrigTabselect 'X51','3' unionselect 'A5','1' unionselect '123','2' unionselect '054','5'select * from @OrigTab ORDER BY 1 DESC;WITH-- Make an inline tally table (CTE) E1(N) AS ( SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ), --10E+1 or 10 rows E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows Tally(N) AS (SELECT 1 FROM E2 a, E2 b) -- use the tally table as a source of rows SELECT TAG = 'PNM-'+RIGHT('0'+CAST(ROW_NUMBER() OVER(ORDER BY Part DESC) AS VARCHAR(2)),2), o.Part, o.qtyFROM @OrigTab oCROSS APPLY (SELECT TOP(o.qty) N FROM Tally) xORDER BY Part DESC
;WITH-- Make an inline tally table (CTE) E1(N) AS ( SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ), --10E+1 or 10 rows E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows Tally(N) AS (SELECT 1 FROM E2 a, E2 b)SELECT COUNT(*) FROM Tally