从具有汇总数据的源 table 在 SQL table 中创建多行

Creating multiple rows in a SQL table from a source table that has summarised data

我有一个 table t_times 看起来像这样

start_time End_time Number_of_slots Slot_Duration
08:00 09:00 6 10
09:00 09:30 1 30

我需要使用 t_times 中的值创建一个 table 来创建 t_slots

start_time End_time Duration
08:00 08:10 10
08:10 08:20 10
08:20 08:30 10
08:30 08:40 10
08:40 08:50 10
08:50 09:00 10
09:00 09:30 30

本质上,对于 number_of_slots 字段中指定的每个值,我需要:

我可以用光标来完成,但这似乎是一种非常迂回的方式。有人可以给我指明 SQL 方向吗?谢谢!!!

所以这里的主要思想是使用数字 table 的经典方法。将这样的 table 作为持久性文件是很常见的,因此不需要在 运行 时间生成它。它是您的分析工具的常用工具。 其次是将它与右侧谓词上的源连接起来。

use tempdb
go

drop table if exists src
go

create table src (
    start_time  time
    ,End_time   time
    ,Number_of_slots int    
    ,Slot_Duration int
)
go

insert into src values
('08:00',   '09:00',    6,  10)
,('09:00',  '09:30',    1,  30)
go

;with nums as (
    select row_number() over(order by (select null)) as n
    from sys.all_columns
)

select start_time, dateadd(MINUTE, n*Slot_Duration, start_time) as end_time
    , Slot_Duration as Duration
from src 
join nums on src.Number_of_slots >= nums.n
order by start_time, end_time