declare @tbl table
(
X char,
Y int
)
insert into @tbl select 'A', 1
insert into @tbl select 'B', 5
insert into @tbl select 'C', 9
-- Query 1 : recursive CTE
; with
cte as
(
select rn = ROW_NUMBER() over (order by Y), X, Y
from @tbl
),
rcte as
(
select rn, X, Y
from cte
where rn = 1
union all
select rn = case when r.Y + 1 < c.Y then r.rn else c.rn end,
X = case when r.Y + 1 < c.Y then r.X else c.X end,
Y = case when r.Y + 1 < c.Y then r.Y + 1 else c.Y end
from rcte r
inner join cte c on r.rn = c.rn - 1
)
select *
from rcte
-- Query 2 : tally table method. Required SQL Server 2012+
; with tally as
(
select n = 1
union all
select n = n + 1
from tally
where n <= 100
),
cte as
( select *, next_Y = isnull(LEAD(Y) OVER (ORDER BY Y), Y + 1)
from @tbl t
)
select c.X, n.n as Y
from cte c
cross join tally n
where n.n >= c.Y
and n.n < c.next_Y
をお試しください定数。おそらく、SQLクエリの外に中間レコードを生成する必要があります。 – Dandorid