It is possible to achieve using
CTE[
^].
DECLARE @tmp TABLE (Col1 VARCHAR(10), Col2 VARCHAR(10), Col3 INT)
INSERT INTO @tmp (Col1, Col2, Col3)
SELECT 'A', 'M1', 3
UNION ALL SELECT 'B', 'M1', 1
UNION ALL SELECT 'C', 'M1', 1
;WITH CTE AS
(
SELECT Col1, Col2, Col3, 1 AS Counter
FROM @tmp
WHERE Col3>=1
UNION ALL
SELECT Col1, Col2, Col3, Counter + 1 AS Counter
FROM CTE
WHERE Counter+1<=Col3
)
SELECT *
FROM CTE
ORDER BY Col1
Result:
A M1 3 1
A M1 3 2
A M1 3 3
B M1 1 1
C M1 1 1