Использование рекурсии и заимствование установочного кода Майкла Фредриксона:
declare @T table (
Name varchar(50),
Sales int
)
insert into @T values ('Stella', '2')
insert into @T values ('Jennifer', '2')
insert into @T values ('Greg', '3')
-- Recursive verion
;with People (Name, Sales) as
(
select Name, Sales
from @T
union all
select Name, Sales - 1
from People
where Sales - 1 > 0
)
select Name, 1 as Quantity
from People
option (maxrecursion 0) -- Recurse without limit
На моем компьютере это работает быстрее (в 5 раз быстрее, чем у Майкла Фредриксона согласно плану запросов, но с большим количеством логических операций чтения), не такэто имеет большое значение.