you can get this with recursive CTE alsodeclare @test table(DATA varchar(5),QTY int )insert into @testSELECT 'A', 2 union allSELECT 'B', 3 union allSELECT 'C',5 union allSELECT 'D',18;With CTE(data,qty,level)AS(SELECT DATA,QTY,1FROM @testUNION ALLSELECT data,qty,level+1FROM CTEWHERE level+1<=qty)SELECT level,data FROM CTE order by data,leveloutput-------------------------------------------level data1 A2 A1 B2 B3 B1 C2 C3 C4 C5 C1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17 D18 D