You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:52:50