Присоединение к таблице подсчета делает это довольно простым. Вы можете узнать больше о таблицах подсчета здесь .
Я сохраняю один вид моей системы. Вот моя версия.
create View [dbo].[cteTally] as
WITH
E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max
cteTally(N) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4
)
select N from cteTally
GO
Далее нам нужна таблица с вашей таблицей, поэтому я просто собрал быструю переменную таблицы. В своем запросе вы бы написали это против своей базовой таблицы.
declare @Something table (KWid int, Orders int, Revenue decimal(7,2))
insert @Something values
(12345, 10, 150)
, (23468, 5, 200)
Теперь у нас есть настройка проблемы, и это становится довольно просто. В этом запросе должны быть указаны данные, которые вы указали.
select s.KWid
, OrderNum = t.N
, Revenue = convert(numeric(7, 2), round(s.Revenue / s.Orders, 2))
from @Something s
join cteTally t on t.N <= s.Orders
order by s.KWid
, t.N