在sql server中,根据日期范围将单行拆分为多行

gk7wooem  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(528)

我的sql server表结构如下所示

FROM_Currency   To_Currency   ExchangeRate   StartDate    EndDate
EUR               GBP            33.5        2018-03-31    2018-04-30
USD               EUR            22.9        2019-01-31    2019-02-28

像这样有多个货币的历史汇率数据和3年以上的汇率,如上表所示,我们有1个月范围内每个货币汇率的开始日期和结束日期,我需要的是基本上把它分成每天,所以基本上每天都需要汇率,例如:对于第一个记录,我需要30行,其中从欧元到英镑,汇率为33.5,新的日期列应该是从2018-03-31到2018-04-30的递增日期。

b4qexyjb

b4qexyjb1#

一个选项使用递归查询:

with cte as (
    select 
         from_currency, 
         to_currency, 
         exchange_rage, 
         startDate, 
         endDate, 
         startDate currentDate
    from mytable t
    union all
    select 
         from_currency, 
         to_currency, 
         exchange_rage, 
         startDate, 
         endDate, 
         dateadd(day, 1, currentDate)
    from cte
    where currentDate < endDate
)
select from_currency, to_currency, exchange_rage, currentDate from cte

如果你的经期超过100天,那么你需要添加 option(maxrecursion 0) 在查询的末尾。

相关问题