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