Как динамически распределить дату? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть таблица для хранения названия продукта и его продления вместе с планом оплаты. Например, есть продукт с именем "Domain Hosting" с планом платежей "Monthly", и его дата обновления в таблице равна '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

Он не будет сохранен в таблице, поэтому он должен быть во время выполнения.

Ответы [ 2 ]

3 голосов
/ 06 ноября 2019

Вот ваш запрос, мы добиваемся этого, используя recursive queries.

  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

вывод:

enter image description here

1 голос
/ 06 ноября 2019
;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

SQL FIDDLE

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...