Я хочу настроить хранимую процедуру в SQL Server, которая создает обменные курсы валют по месяцам на основе начальной и конечной даты для каждой валюты.
Ниже приведен формат таблицы, с которой я хочу работатьс:
Table 1 (Input Table)
+------------+------------+------------+
| Start Date | End Date | Currency |
+------------+------------+------------+
| 01/01/2016 | 30/05/2016 | EUR |
| 01/03/2017 | 31/05/2017 | BDT |
+------------+------------+------------+
Из приведенной выше таблицы я хочу, чтобы хранимая процедура выдавала вывод, подобный следующему:
Table 2 (Desired result from sql script)
Date Currency
---------------------
01/01/2016 EUR
01/02/2016 EUR
01/03/2016 EUR
01/04/2016 EUR
01/05/2016 EUR
01/03/2017 BDT
01/04/2017 BDT
01/05/2017 BDT
Затем я хочу объединить эти два вывода, чтобы получить окончательную таблицукак это:
Final Table (Join on Table 1 and 2)
Start Date End Date Split Date Currency Exchange Rate
-------------------------------------------------------------
01/01/2016 30/05/2016 18/01/2016 EUR x
01/01/2016 30/05/2016 18/02/2016 EUR z
01/01/2016 30/05/2016 18/03/2016 EUR h
01/01/2016 30/05/2016 18/04/2016 EUR g
01/01/2016 30/05/2016 18/05/2016 EUR a
01/03/2017 31/05/2018 01/03/2017 BDT b
01/03/2017 31/05/2018 01/04/2017 BDT c
01/03/2017 31/05/2018 01/05/2017 BDT f
Я нашел несколько решений по стеку, как это:
declare @StartDate date = '20170401'
, @EndDate date = '20170731';
;with Months as
(
select top (datediff(month, @startdate, @enddate) + 1)
[Month] = dateadd(month, row_number() over (order by number) -1, @StartDate),
MonthEnd = dateadd(day,-1,dateadd(month, row_number() over (order by number), @StartDate))
from
master.dbo.spt_values
order by
[Month]
)
select * from Months;
Однако, это использует только жестко закодированные даты начала и окончания.Я хочу, чтобы начальная и конечная даты были взяты для каждой строки из входной таблицы, подобной той, которая упоминалась в начале вопроса.