You can use recursive CTE:
WITH RCTE AS ( SELECT ordernumber, qty, articlenumber, qty AS L FROM Table1 UNION ALL SELECT ordernumber, 1, articlenumber, L - 1 AS L FROM RCTE WHERE L>0 ) SELECT ordernumber,qty, articlenumber FROM RCTE WHERE qty = 1
SQLFiddleDEMO
EDIT: Based on Marek Grzhenkovich’s answer and MatBailie's comment, all new idea:
WITH CTE_Nums AS ( SELECT MAX(qty) n FROM dbo.Table1 UNION ALL SELECT n-1 FROM CTE_Nums WHERE n>1 ) SELECT ordernumber , 1 AS qty, articlenumber FROM dbo.Table1 t1 INNER JOIN CTE_Nums n ON t1.qty >= nn
Creating a number from 1 to max (qty) and joining a table on it.
SQLFiddle DEMO
source share