Сначала вам нужен подсчет (например)
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 @MyTable table (MyDate date, RunCount int);
insert into @MyTable (MyDate, RunCount)
values
('31 Jan 2020', 3),
('29 Feb 2020', 2),
('31 Mar 2020', 1);
select MT.*
from @MyTable MT
inner join cteTally T on T.N <= MT.RunCount
order by MyDate, RunCount;
Возвращает:
MyDate RunCount
--------------------
2020-01-31 3
2020-01-31 3
2020-01-31 3
2020-02-29 2
2020-02-29 2
2020-03-31 1
ПРИМЕЧАНИЕ: Tally Table любезно предоставлен @Larnu, но я не могу найти оригинальный пост.