首页 > 解决方案 > 生成“缺失”行 SQL

问题描述

我想创建一个视图来重新排列我当前的表。--> T-SQL *表格如下所示:

在此处输入图像描述

您可能会注意到,每行的货币不是唯一的,但一行可能是多年。

我需要一个可以添加缺失行的视图。

例如 :

我不知道如何开始这个!有人知道吗?

标签: sqltsql

解决方案


递归公用表表达式可以将这些范围拆分为单独的行。

样本数据

declare @currencies table
(
    curr nvarchar(3),
    factor int,
    yearFrom int,
    yearTo int
);

insert into @currencies (curr, factor, yearFrom, yearTo) values
('EUR', 10, 2000, 2005),
('EUR', 15, 2006, 2008),
('USD', 12, 2001, 2004);

解决方案

with cte as
(
    select cur.curr, cur.factor, min(cur.yearFrom) as yearMin, max(cur.yearTo) as yearMax
    from @currencies cur
    group by cur.curr, cur.factor
        union all
    select cte.curr, cte.factor, cte.yearMin+1, cte.yearMax
    from cte
    where cte.yearMin < cte.yearMax
)
select c.curr, c.yearMin as [year], c.factor
from cte c
order by c.curr, c.yearMin;

结果

curr year        factor
---- ----------- -----------
EUR  2000        10
EUR  2001        10
EUR  2002        10
EUR  2003        10
EUR  2004        10
EUR  2005        10
EUR  2006        15
EUR  2007        15
EUR  2008        15
USD  2001        12
USD  2002        12
USD  2003        12
USD  2004        12

推荐阅读