Sql server 如何动态分配日期?

Sql server 如何动态分配日期?,sql-server,Sql Server,我有一个表来存储产品的名称和它的更新日期以及付款计划。例如,有一个名为Domain Hosting的产品,其付款计划为每月一次,表中的续订日期存储为“15-11-2019”,如果我使用Select语句,我希望它在12行中显示12个月,如下所示 Product Name Renewal Date Payment Plan Domain Hosting 2019-11-15 Monthly Domain Hosting 2019-12-15 Monthly

我有一个表来存储产品的名称和它的更新日期以及付款计划。例如,有一个名为Domain Hosting的产品,其付款计划为每月一次,表中的续订日期存储为“15-11-2019”,如果我使用Select语句,我希望它在12行中显示12个月,如下所示

Product Name      Renewal Date   Payment Plan
Domain Hosting    2019-11-15     Monthly
Domain Hosting    2019-12-15     Monthly
Domain Hosting    2020-01-15     Monthly
Domain Hosting    2020-02-15     Monthly
Domain Hosting    2020-03-15     Monthly
Domain Hosting    2020-04-15     Monthly
Domain Hosting    2020-05-15     Monthly
Domain Hosting    2020-06-15     Monthly
Domain Hosting    2020-07-15     Monthly
Domain Hosting    2020-08-15     Monthly
Domain Hosting    2020-09-15     Monthly
Domain Hosting    2020-10-15     Monthly

它不会存储在表中,因此必须在运行时存储。

这是您的查询,我们使用递归查询来实现这一点

输出:

加入理货台。类似于t.num上的内部连接计数t,介于1和12之间
  with cte as (
    select 0 as ctr
    union all
    select ctr + 1 from cte where ctr < 11
  ) select 'Domain Hosting' as [Product Name]
    , cast(dateadd(month, ctr, '2019-11-15') as date) as [Renewal Date]
    , 'Monthly' as [Payment Plan]
  from cte
;with AllDates AS
(
  SELECT CAST('2019-11-15' AS DATE) AS Dates
  UNION ALL
  SELECT DateAdd(month,1,Dates)
  FROM AllDates
  WHERE 
  Dates < DateAdd(month,11,CAST('2019-11-15' AS DATE))
)
SELECT 'Domain Hosting' as [Product Name], Dates, 'Monthly' as [Payment Plan] FROM AllDates