在SQL Server中创建视图:为每个起始日期生成带计算日期与天数标识的多行数据
解决SQL Server生成多日期记录的需求
嘿,作为SQL Server新手,这个需求其实很好实现,我给你两种实用的方案,你可以根据自己的习惯来选:
方案1:用UNION ALL拼接结果
这种方式最直观,适合新手一步步理解,就是分别写出三个查询,每个查询计算对应天数的日期,再把结果合并起来:
SELECT startDate AS [Start Date], DATEADD(day, 30, startDate) AS AdditionalDate, 30 AS AdditionalDays FROM Appointment UNION ALL SELECT startDate AS [Start Date], DATEADD(day, 60, startDate) AS AdditionalDate, 60 AS AdditionalDays FROM Appointment UNION ALL SELECT startDate AS [Start Date], DATEADD(day, 90, startDate) AS AdditionalDate, 90 AS AdditionalDays FROM Appointment
小说明:
DATEADD(day, N, startDate)是SQL Server里给日期加N天的专用函数,这里分别对应加30、60、90天的需求- 用
UNION ALL而不是UNION,是因为我们需要保留所有重复的起始日期记录,不会自动去重
方案2:用CROSS APPLY + VALUES子句(更简洁)
如果觉得上面的代码重复太多,这个方案会更紧凑,后续调整天数也更方便:
SELECT a.startDate AS [Start Date], DATEADD(day, v.days, a.startDate) AS AdditionalDate, v.days AS AdditionalDays FROM Appointment a CROSS APPLY ( VALUES (30), (60), (90) ) v(days)
小说明:
VALUES (30), (60), (90)相当于生成了一个临时的天数列表CROSS APPLY会把这个天数列表和Appointment表的每一行关联起来,自动给每个起始日期生成3条对应记录- 以后要是需要加新的天数(比如120天),只需要在VALUES里添个
(120)就行,不用重复写大量代码
把结果存为视图
如果需要反复使用这个结果,可以把上面的查询包装成视图:
CREATE VIEW AppointmentFollowUpDates AS SELECT a.startDate AS [Start Date], DATEADD(day, v.days, a.startDate) AS AdditionalDate, v.days AS AdditionalDays FROM Appointment a CROSS APPLY ( VALUES (30), (60), (90) ) v(days)
之后直接查询这个视图就能拿到结果:SELECT * FROM AppointmentFollowUpDates;
内容的提问来源于stack exchange,提问作者sye
相关产品推荐
相关产品推荐

