此表的作用类似于某人工作地点的历史记录。 其中TypeID = 1是当前的工作地点,因此EndDate是今天的日期,StartDate是他们开始的时间,并根据Months列进行计算。
他们以前工作的地方是TypeID = 2,因此EndDate比第一条记录的StartDate要短1天,而TypeID为2的StartDate应该是他们盯着这份工作的时间,即24个月前。
表格格式
create table #test (startdate date, enddate date, months int, typeid int, account int)
insert into #test values (NULL,getdate(), 12, 1, 12345)
insert into #test values (NULL,NULL, 24, 2, 12345)
输出结果
create table #test (startdate date, enddate date, months int, typeid int, account int)
insert into #test values ('2017-11-02',getdate(), 12, 1, 12345)
insert into #test values ('2015-11-1','2017-11-01', 24, 2, 12345)
startdate enddate months typeid account
2017-11-02 2018-11-02 12 1 12345
2015-11-01 2017-11-01 24 2 12345
有人可以帮忙吗?
答案 0 :(得分:0)
评论太久了,但仍然有很多来自问题的假设
#test和#testa应该是不同的表吗?我假设您已正确填充#test,并且可以使用
之类的方法填充#testacreate table #test (startdate date, enddate date, months int, typeid int, account int)
insert into #test values (NULL,getdate(), 12, 1, 12345)
insert into #test values (NULL,NULL, 24, 2, 12345)
create table #testa (startdate date, enddate date, months int, typeid int, account int)
INSERT INTO #testa
SELECT DATEADD(month, months*-1, enddate), enddate, months, typeid, account
FROM #test
WHERE typeid = 1
INSERT INTO #testa
SELECT DATEADD(month, months*-1, DATEADD(day, -1, GETDATE())), DATEADD(day, -1, GETDATE()), months, typeid, account
FROM #test
WHERE typeid = 2
SELECT * FROM #testa
DROP TABLE #test
DROP TABLE #testa
如果不需要#testa,可以通过#test上的更新语句来完成。 这也可以通过单个查询中的case语句来完成。我将其保留为两个,以尝试了解此答案是否在正确的路径上。