sql - 生成“缺失”行 SQL
问题描述
我想创建一个视图来重新排列我当前的表。--> T-SQL *表格如下所示:
您可能会注意到,每行的货币不是唯一的,但一行可能是多年。
我需要一个可以添加缺失行的视图。
例如 :
- 澳元 - EUR - 163 - 1999
- 澳元 - EUR - 163 - 2000
- 澳元 - EUR - 16124 - 2001
- 澳元 - EUR - 16124 - 2002
- 澳元 - EUR - 16124 - 2003
- ……
我不知道如何开始这个!有人知道吗?
解决方案
递归公用表表达式可以将这些范围拆分为单独的行。
样本数据
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
推荐阅读
- javascript - MongoDB:创建包含当前时间戳的复合_id
- chromebook - 我故意删除了 sudo 并且终端要求我输入 sudo passwd
- google-app-engine - 具有 4GB RAM 的 Google Cloud Platform App Engine 标准环境
- mysql - mysql中的b/w CURRENTTIMESTAMP和CURRENTTIMESTAMP()的区别
- scala - 在 Intellij 中可视化结构化流 writeStream 输出
- python - 在 AttributeError 中使用 flake8 和 pytest 进行 Python 测试:'Application' object has no attribute 'parse_preliminary_options_and_args'
- css - Angular - 侧边栏导航
- swift - 如何在 SwiftUI 中呈现 Game Center 匹配视图控制器?
- azure - ActiveDirectoryMembershipProvider on Azure App Service: Access Denied
- c# - C#、MVC、PUT 返回 405 Method Not Alowed