gpt4 book ai didi

sql-server - 如何获取日期之间的计数并将行数写入带有 T-SQL 的表中?

转载 作者:行者123 更新时间:2023-12-04 02:18:17 24 4
gpt4 key购买 nike

我的语言是 T-SQL,我正在使用 MS SQLServer 2008。

好吧,我有一个包含大量数据的表,其中包含有关员工的信息。每个员工都有一个“开始日期”(他开始为公司工作的时间)和“结束日期”(他辞职的时间)。我想在表格中写入与该员工在一个月内为公司工作的行数相同的行数。例如:

我的基本表:


员工编号 |开始日期 |结束日期4711 20150101 20150523


此示例显示员工为公司工作了 5 个月。所以我想在新表中插入 5 行,其中包含以下信息:

新表:


  Employee Number | StartDate | EndDate
row1: 4711 20150101 20150523

row2: 4711 20150201 20150523

row3: 4711 20150301 20150523

row4: 4711 20150401 20150523

row5: 4711 20150501 20150523

我试过这个来获取日期之间的月数。我想我需要使用光标或类似的东西。

    declare @start DATE = '2011-05-01'
declare @end DATE = '2011-08-01'

;with months (date)
AS
(
SELECT @start
UNION ALL
SELECT DATEADD(month,1,date)
from months
where DATEADD(month,1,date)<=@end
)
select Datename(month,date) from months

希望你明白我的意思,我尽量说得具体一些。

最佳答案

我认为您的选择是正确的。

declare @start DATE = (select min(startdate) from dbo.employee)
declare @end DATE = cast(sysdatetime() as date)

set @start = DATEADD(day, - datepart(day, @start) + 1, @start)

;with months (date)
AS
(
SELECT @start
UNION ALL
SELECT DATEADD(month,1,date)
from months
where DATEADD(month,1,date)<=@end
)
select employee.EmployeeNumber, Year = datepart(year, date), Month = DATENAME(month, date), employee.StartDate, employee.EndDate
from months
inner join dbo.employee on month.date >= employee.startdate and (month.date <= employee.enddate or employee.enddate is null)

关于sql-server - 如何获取日期之间的计数并将行数写入带有 T-SQL 的表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32734257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com