问题描述
我有两个sql Server表,tb_exam
和Auxiliary_Calculator
。
tb_exam
Date(FK) Degree Module Hall
----------------------------------
2020-11-18 CS M1 H1
2020-11-19 SE M2 H2
2020-11-20 CS M3 H1
Auxiliary_Calculator
Date(PK) KindOfDays
----------------------------------
2020-11-18 BankDay
2020-11-19 BankDay
2020-11-20 BankDay
2020-11-21 Holiday
tb_exam
的Date列是Auxiliary_Calculator
表的Date列的外键。
我想在tb_exam
表的 Date 列中自动递增,并加入这两个表,使其看起来像这个
Date(FK) KindOfDays Degree Module Hall
------------------------------------------------
2020-11-18 BankDay CS M1 H1
2020-11-19 BankDay SE M2 H2
2020-11-20 BankDay CS M3 H1
我尝试以这种方式递增。但是我不知道如何编写查询以显示最终表。
CREATE PROCEDURE [dbo].[AutoIncrementDate]
@StartDate DATETIME,@EndDate DATETIME
AS
WITH tb_exam
AS
(
SELECT DATEADD(D,DATEDIFF(D,@StartDate),0) AS Dt
UNION ALL
SELECT DATEADD(D,1,Dt)
FROM tb_exam
WHERE Dt BETWEEN @StartDate AND DATEADD(D,-1,@EndDate)
)
SELECT *
FROM tb_exam
GO
有人可以帮我修改吗?
解决方法
如果自动增量是唯一的问题,这应该可以解决问题:
DECLARE @StartDate DATE = '2020-11-01'
DECLARE @EndDate DATE = '2020-12-01'
;WITH cteDates AS(
SELECT @StartDate AS dt
UNION ALL
SELECT DATEADD(d,1,dt)
FROM cteDates
WHERE dt < @EndDate
)
SELECT d.dt,ac.KindOfDays,e.Degree,e.Module,e.Hall
FROM cteDates d
LEFT JOIN Auxiliary_Calculator ac ON ac.Date = d.dt
LEFT JOIN tb_exam e ON e.Date = d.dt