我可以根据 SQL 中的开始日期和结束日期复制整行吗
Can I Duplicate an Entire Row based on a Beginning Date and Ending Date in SQL
在 SQL Server Management Studio 中,有没有办法获取一些具有开始日期和结束日期的 excel 数据,并让它获取初始开始日期并按月复制记录直到结束日期,请参阅示例我有一个包含数据的电子表格,我需要按月将其转换为下面的数据,即存在的记录数。因此,例如,如果第一口井从 2018 年 1 月开始到 2018 年 4 月结束,我需要它复制 2018 年 1 月、2018 年 2 月和 2018 年 3 月的行,它甚至可以列出 2018 年 4 月,但停止复制数据中的行,但不要复制该记录已超过其结束日期。完全希望这是有道理的。我可以手动完成,但尝试编写一个存储过程,从原始 table 创建一个新的 table,如下例所示。
起始数据
Well Operator Date_Start DateEnd Months
--------------------------------------------------------------------------------------
JIM TOM LONTOS 30 23S 28E RB MATADOR RESOURCES 1/1/2018 4/2/2018 3
ODIE 1606 BCE-MACH III LLC 1/1/2018 4/16/2018 3
SIEGRIST 1307 MARATHON OIL 1/1/2018 5/23/2018 4
SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018 11
结束数据
Date Lease Operator Start_date End_Date
--------------------------------------------------------------------------------------
Jan-18 JIM TOM LONTOS 30 23S 28E RB MATADOR RESOURCES 1/1/2018 4/2/2018
Feb-18 JIM TOM LONTOS 30 23S 28E RB MATADOR RESOURCES 1/1/2018 4/2/2018
Mar-18 JIM TOM LONTOS 30 23S 28E RB MATADOR RESOURCES 1/1/2018 4/2/2018
Jan-18 ODIE 1606 BCE-MACH III LLC 1/1/2018 4/16/2018
Feb-18 ODIE 1606 BCE-MACH III LLC 1/1/2018 4/16/2018
Mar-18 ODIE 1606 BCE-MACH III LLC 1/1/2018 4/16/2018
Jan-18 SIEGRIST 1307 MARATHON OIL 1/1/2018 5/23/2018
Feb-18 SIEGRIST 1307 MARATHON OIL 1/1/2018 5/23/2018
Mar-18 SIEGRIST 1307 MARATHON OIL 1/1/2018 5/23/2018
Apr-18 SIEGRIST 1307 MARATHON OIL 1/1/2018 5/23/2018
Jan-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
Feb-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
Mar-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
Apr-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
May-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
Jun-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
Jul-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
Aug-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
一个选项使用递归查询:
with cte as (
select datefromparts(year(date_start), month(date_start), 1) dt, well, operator, date_start date_end
from mytable t
union all
select dateadd(month, 1, dt), well, operator, date_start, date_end
from cte c
where c.dt < end_date
)
select * from cte
在 SQL Server Management Studio 中,有没有办法获取一些具有开始日期和结束日期的 excel 数据,并让它获取初始开始日期并按月复制记录直到结束日期,请参阅示例我有一个包含数据的电子表格,我需要按月将其转换为下面的数据,即存在的记录数。因此,例如,如果第一口井从 2018 年 1 月开始到 2018 年 4 月结束,我需要它复制 2018 年 1 月、2018 年 2 月和 2018 年 3 月的行,它甚至可以列出 2018 年 4 月,但停止复制数据中的行,但不要复制该记录已超过其结束日期。完全希望这是有道理的。我可以手动完成,但尝试编写一个存储过程,从原始 table 创建一个新的 table,如下例所示。
起始数据
Well Operator Date_Start DateEnd Months
--------------------------------------------------------------------------------------
JIM TOM LONTOS 30 23S 28E RB MATADOR RESOURCES 1/1/2018 4/2/2018 3
ODIE 1606 BCE-MACH III LLC 1/1/2018 4/16/2018 3
SIEGRIST 1307 MARATHON OIL 1/1/2018 5/23/2018 4
SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018 11
结束数据
Date Lease Operator Start_date End_Date
--------------------------------------------------------------------------------------
Jan-18 JIM TOM LONTOS 30 23S 28E RB MATADOR RESOURCES 1/1/2018 4/2/2018
Feb-18 JIM TOM LONTOS 30 23S 28E RB MATADOR RESOURCES 1/1/2018 4/2/2018
Mar-18 JIM TOM LONTOS 30 23S 28E RB MATADOR RESOURCES 1/1/2018 4/2/2018
Jan-18 ODIE 1606 BCE-MACH III LLC 1/1/2018 4/16/2018
Feb-18 ODIE 1606 BCE-MACH III LLC 1/1/2018 4/16/2018
Mar-18 ODIE 1606 BCE-MACH III LLC 1/1/2018 4/16/2018
Jan-18 SIEGRIST 1307 MARATHON OIL 1/1/2018 5/23/2018
Feb-18 SIEGRIST 1307 MARATHON OIL 1/1/2018 5/23/2018
Mar-18 SIEGRIST 1307 MARATHON OIL 1/1/2018 5/23/2018
Apr-18 SIEGRIST 1307 MARATHON OIL 1/1/2018 5/23/2018
Jan-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
Feb-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
Mar-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
Apr-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
May-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
Jun-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
Jul-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
Aug-18 SILVERTIP 76-7 UNIT A OCCIDENTAL PETROLEUM 1/1/2018 12/6/2018
一个选项使用递归查询:
with cte as (
select datefromparts(year(date_start), month(date_start), 1) dt, well, operator, date_start date_end
from mytable t
union all
select dateadd(month, 1, dt), well, operator, date_start, date_end
from cte c
where c.dt < end_date
)
select * from cte